従来の crash(1M) ユーティリティから mdb(1) への移行は比較的簡単です。MDB では、crash コマンドの多くを提供しています。MDB での拡張機能および対話機能が追加されたことによって、プログラマは現在のコマンドセットでは調べることのできないシステムの側面を調べることができるようになりました。
この付録では、crash(1M) のいくつかの機能について簡単に説明し、それに相当する MDB の機能を紹介します。
crash -d、-n、および -w コマンド行オプションは、mdb ではサポートされていません。crash ダンプファイルとネームリスト (シンボルテーブルファイル) は mdb への引数として、ネームリスト、クラッシュダンプファイルの順に指定します。稼動しているカーネルを調べるには、追加の引数を付けずに mdb -k オプションを指定します。ユーザーが mdb の出力先をファイルまたは別の出力先に変更するには、コマンド行で mdb を起動した後、適切なシェルリダイレクション演算子を使用するか、::log 組み込み dcmd を使用する必要があります。
一般的に、MDB における入力は関数名 (MDB では dcmd 名) の前に "::" を付けること以外は crash と似ています。一部の MDB dcmd では、dcmd 名の前に式の引数を指定できます。crash と同様、dcmd 名の後に続けて文字列オプションを指定できます。関数呼び出しの後に ! 文字を指定すると、MDB は指定されたシェルパイプラインへのパイプラインも作成します。MDB で指定されたすべての即値は、デフォルトでは 16 進数で解釈されます。表 B-1 に示すように、即値に対する基数の指示子は crash と MDB とでは異なっています。
表 B-1 基数指示子
crash |
mdb |
基数 |
---|---|---|
0x |
0x |
16 進数 |
0d |
0t |
10 進数 |
0b |
0i |
2 進数 |
多くの crash コマンドでは、スロット番号またはスロット範囲を入力引数としてとることができました。Solaris オペレーティング環境はスロットという点では構成されなくなったので、MDB dcmd はスロット番号の処理をサポートしていません。
crash 関数 |
mdb dcmd |
コメント |
---|---|---|
? |
::dcmds |
使用可能な関数を一覧表示する |
!command |
!command |
シェルへのエスケープおよびコマンドを実行する |
base |
= |
mdb では、= 書式文字を使用して、左側の式の値を既知の書式に変換できる。8 進数、10 進数、および 16 進数のための書式が用意されている |
callout |
::callout |
コールアウトテーブルを出力する |
class |
::class |
スケジューリングクラスを出力する |
cpu |
::cpuinfo |
システム CPU に振り分けられたスレッドに関する情報を出力する。特定の CPU 構造体の内容が必要な場合、ユーザーは $<cpu マクロを mdb の CPU アドレスに適用する必要がある |
help |
::help |
名前を指定した dcmd、または一般的なヘルプ情報を出力する |
kfp |
::regs |
mdb ::regs dcmd は、現在のスタックフレームポインタを含む、完全なカーネルレジスタセットを表示する。$C dcmd を使用すると、フレームポインタを含めてスタックのバックトレースを表示できる |
kmalog |
::kmalog |
カーネルメモリーアロケータのトランザクションログのイベントを表示する |
kmastat |
::kmastat |
カーネルメモリーアロケータのトランザクションログを出力する |
kmausers |
::kmausers |
カーネルメモリーアロケータで現在のメモリー割り当て量が中程度あるいは大きいユーザーに関する情報を出力する |
mount |
::fsinfo |
マウントされているファイルシステムに関する情報を出力する |
nm |
::nm |
シンボルのタイプと値に関する情報を出力する |
od |
::dump |
指定された領域の書式付きメモリーダンプを出力する。mdb では、::dump により領域が ASCII と 16 進数の混合形式で表示される |
proc |
::ps |
アクティブなプロセスの表を出力する |
quit |
::quit |
デバッガを終了する |
rd |
::dump |
指定された領域の書式付きメモリーダンプを出力する。mdb では、::dump により領域が ASCII と 16 進数の混合形式で表示される |
redirect |
::log |
mdb では、入力に対する出力と出力は、::log を使用してグローバルに出力先をログファイルに変更できる |
search |
::kgrep |
mdb では、::kgrep dcmd を使用してカーネルのアドレス空間で特定の値を検索できる。パターンマッチング組み込み dcmd を使用すると、物理、仮想、またはオブジェクトファイルのアドレス空間でパターンを検索することもできる |
stack |
::stack |
::stack を使用すると、現在のスタックトレースを取得できる。特定のカーネルスレッドのスタックトレースは、::findstack dcmd を使用して判定できる。現在のスタックのメモリーダンプは、/ または ::dump dcmd と現在のスタックポインタを使用して取得できる。$<stackregs マクロをスタックポインタに適用すると、フレームごとに保存されたレジスタ値を取得できる |
status |
::status |
デバッガが調査しているシステムまたはダンプに関する状態情報を表示する |
stream |
::stream |
mdb ::stream dcmd を使用すると、特定のカーネル STREAM の構造体をフォーマットし表示できる。アクティブな STREAM 構造体が必要な場合、ユーザーは mdb で ::walk stream_head_cache を実行し、その結果得られたアドレスを適切なフォーマット dcmd またはマクロにパイプする必要がある |
strstat |
::kmastat |
::kmastat dcmd は、strstat() 関数によってレポートされた情報のスーパーセットを表示する |
trace |
::stack |
現在のスタックトレースは、::stack を使用して取得できる。特定のカーネルスレッドのスタックトレースは、::findstack dcmd を使用して決定できる。現在のスタックのメモリーダンプは、/ または ::dump dcmd と現在のスタックポインタを使用して取得できる。$<stackregs マクロをスタックポインタに適用すると、フレームごとに保存されたレジスタ値を取得できる |
var |
$<v |
グローバルな var 構造体の調整可能なシステムパラメタを出力する |
vfs |
::fsinfo |
マウントされているファイルシステムに関する情報を出力する |
vtop |
::vtop |
指定された仮想アドレスの物理的なアドレス変換を出力する |