Solaris モジューラデバッガ

付録 B crash からの移行

従来の 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 における入力は関数名 (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 

指定された仮想アドレスの物理的なアドレス変換を出力する