mdb(1) は Solaris 8 リリースで新たに提供されたモジューラデバッガです。このデバッガは、拡張が容易であるという点で現在の Solaris デバッガの中でも独特のものです。adb マクロの作成を試みたことがあるユーザーなら、この作業が簡単でないことがお分かりでしょう。このデバッガのプログラミング API を使用して、モジュールをコンパイルすることによって、デバッガのコンテキスト内で希望する処理を実行することができます。mdb は adb(1) や crash(1M) との下位互換性があります。
さらに、mdb(1) には、コマンド行での編集、コマンド履歴、組み込み出力ページャ、構文チェック、コマンドパイプラインなどの、いくつかの便利な機能があります。カーネルに対する事後検分用のデバッガとしては、このデバッガをお勧めします。
整数変数 maxusers の値を 5 から 6 に変更するには、次のようにします。
# mdb -kw Loading modules: [ unix krtld genunix ip logindmux ptm nfs ipc lofs ] > maxusers/D maxusers: maxusers: 495 > maxusers/W 200 maxusers: 0x1ef = 0x200 > $q |
実際に変更する場合は、maxusers を変更したい変数のアドレスに、値を設定したい値に置き換えて、このコマンドを実行します。
モジューラデバッガの詳細は、『Solaris モジューラデバッガ』を参照してください。
adb や kadb、mdb では、モジュール名接頭辞を指定する必要はありません。モジュールが読み込まれると、そのモジュールのシンボルは、コアカーネルのシンボルやすでにロードされているその他のモジュールのシンボルとの共通の名前空間を形成するからです。
たとえば、UFS モジュールがロードされると想定した場合、ufs:ufs_WRITES は、個々のデバッガでは ufs_WRITES としてアクセスされます。しかし、/etc/system ファイルに設定する場合は、ufs: 接頭辞が必要です。adb や kadb でモジュール名接頭辞を指定すると、未定義のシンボルのメッセージが出力されます。