kmdb デバッガは対話型のカーネルデバッガであり、次の機能を提供します。
カーネル実行の制御
カーネル状態の検査
コードのライブ変更
このセクションでは、ユーザーがすでに kmdb デバッガについて精通していることを前提にしています。このセクションの重点は、デバイスドライバの設計時に役立つ kmdb 機能にあります。kmdb の使用方法について詳しく学ぶには、 kmdb(1) のマニュアルページとOracle Solaris Modular Debugger Guide を参照してください。kadb に精通している場合は、 kadb(1M) のマニュアルページを参照し、kadb と kmdb の主な違いを確認してください。
kmdb デバッガのロードやアンロードは、任意で実行できます。kmdb のロードやアンロードの手順については、『Oracle Solaris モジューラデバッガ』を参照してください。安全性と利便性の観点から、代替カーネルでのブートを強くお勧めします。このセクションで説明するように、ブート処理は SPARC プラットフォームと x86 プラットフォームとでわずかに異なります。
kmdb と代替カーネルの両方を使用して SPARC システムをブートするには、次のいずれかのコマンドを使用します。
boot kmdb -D kernel.test/sparcv9/unix boot kernel.test/sparcv9/unix -k
kmdb と代替カーネルの両方を使用して x86 システムをブートするには、次のいずれかのコマンドを使用します。
b kmdb -D kernel.test/unix b kernel.test/unix -k
ブレークポイントを設定するには、次の例に示すように bp コマンドを使用します。
使用例 23-5 kmdb での標準ブレークポイントの設定[0]> myModule`myBreakpointLocation::bp
ターゲットモジュールがロードされていない場合、この状態を示すエラーメッセージが表示され、ブレークポイントは作成されません。この場合には遅延ブレークポイントを使用できます。遅延ブレークポイントは、指定されたモジュールがロードされた時点で自動的に有効になります。遅延ブレークポイントを設定するには、bp コマンドのあとにターゲット位置を指定します。次に遅延ブレークポイントの例を示します。
使用例 23-6 kmdb での遅延ブレークポイントの設定[0]>::bp myModule`myBreakpointLocation
ブレークポイントの使用方法の詳細については、『Oracle Solaris モジューラデバッガ』を参照してください。次の 2 つの行のいずれかを入力してもヘルプが得られます。
> ::help bp > ::bp dcmd
kmdb(1M) デバッガでサポートされているマクロを使用すると、カーネルデータ構造体を表示できます。kmdb のマクロを表示するには $M を使用します。マクロは次の形式で使用します。
[ address ] $<macroname
次の表に含まれる kmdb マクロは、デバイスドライバの開発者に特に役立ちます。便宜上、該当する場合は旧バージョンのマクロ名も示します。
|
::devinfo dcmd で表示されるノード状態は、次のいずれかの値を取ります。
ドライバの attach (9E) ルーチンが正常に復帰しました。
このノードはドライバにバインドされていますが、ドライバの probe(9E) ルーチンがまだ呼び出されていません。
親のネクサスがドライバ用のバスアドレスを割り当てました。実装に固有の初期化が完了しています。ドライバの probe(9E) ルーチンは、現時点でまだ呼び出されていません。
このデバイスノードがカーネルのデバイスツリー内にリンクされましたが、システムはまだこのノードのドライバを検出していません。
ドライバの probe(9E) ルーチンが正常に復帰しました。
このデバイスは完全に構成されています。