Solaris モジューラデバッガ

付録 B 注意

警告

次の警告情報は MDB の使用に適用されます。

エラー回復メカニズムの使用

デバッガとその dmod は同じアドレス空間内で動作するので、dmod にバグがあると、MDB がコアをダンプしたり、誤動作したりする可能性があります。MDB の resume 機能 (「シグナル処理」を参照) はこのような状況に対して、制限付きで回復メカニズムを提供します。しかし、dmod 自身の状態やデバッガの大域的な状態だけでは、MDB は 当該 dmod が壊れているかどうかを最終的には判断できません。したがって、resume 操作は安全であるとは保証されず、また、その後のデバッガのクラッシュを防ぐこともできません。resume によるもっとも安全な対処方法は、重要なデバッグ情報を保存し、デバッガを停止し再起動します。

動作中のオペレーティングシステムのデバッガによる修正

動作中のオペレーティングシステムのアドレス空間をデバッガを使用して修正する (書き込む) ことは非常に危険であり、ユーザーがカーネルデータの構造を破損するとシステムパニックが発生する可能性があります。

動作中のオペレーティングシステムの kmdb による停止

kmdb を使って動作中のオペレーティングシステムを停止するには、mdb -K を使用するか、動作中のオペレーティングシステムにブレークポイントを設定しますが、この操作は、開発者が本稼働システム以外のシステムで行うためのものです。kmdb によってオペレーティングシステムカーネルが停止すると、オペレーティングシステムサービスとネットワーク関連機能が実行されないため、ターゲットシステムに依存するネットワーク上のほかのシステムはターゲットシステムに接続できなくなります。

注意

プロセスコアファイルの調査に関する制限

MDB は、Solaris 2.6 より前の Solaris オペレーティングシステムのリリースで生成されたプロセスコアファイルの調査をサポートしません。あるオペレーティングシステムのリリースで生成されたコアファイルを別のオペレーティングシステムのリリースで調査する場合、実行時リンカーのデバッギングインタフェース (librtld_db) は初期化できない可能性があります。この場合、共用ライブラリのシンボル情報は利用できません。さらに、共用マッピングはユーザーのコアファイル内には存在しないので、共用ライブラリのテキストセクションと読み取り専用データは、コアがダンプされた時点にプロセス内に存在していたデータと一致しない可能性があります。x86 版の Solaris システムから生成されたコアファイルは SPARC 版の Solaris システムでは調査できず、その逆もできません。

クラッシュダンプファイルの調査に関する制限

Solaris 7 以前のリリースで生成されたクラッシュダンプを調査するには、対応するオペレーティングシステムのリリース用の libkvm が必要です。あるオペレーティングシステムのリリースで生成されたクラッシュダンプを別のオペレーティングシステムのリリースで dmod を使用して調査する場合、カーネルの実装によっては、いくつかの dcmd や walker が適切に動作しない可能性があります。この状況を検出すると、MDB は警告メッセージを発行します。x86 版の Solaris システムから生成されたクラッシュダンプは SPARC 版の Solaris システムでは調査できず、その逆もできません。

32 ビットと 64 ビットのデバッガ間の関係

MDB は 32 ビットと 64 ビットの両方のプログラムのデバッグをサポートします。ターゲットのプログラムを調査して、そのデータモデルを決定したあと、MDB は必要に応じて自動的に、ターゲットと同じデータモデルを持つ mdb バイナリを実行し直します。このアプローチによって、読み込まれたモジュールがプライマリターゲットと同じデータモデルを使用するので、 デバッガモジュールを作成する作業が簡単になります。64 ビットのターゲットプログラムをデバッグできるのは 64 ビットのデバッガだけです。64 ビットのデバッガを使用できるのは 64 ビットのオペレーティング環境が動作しているシステム上だけです。

kmdb に使用できるメモリーに関する制限

kmdb に使用できるメモリーは、デバッガが読み込まれるときに割り当てられますが、それ以降は拡張することができません。デバッガのコマンドで、使用可能な容量よりも多くのメモリーを割り当てようとすると、コマンドが実行できなくなります。デバッガは、メモリーが不足している状況からの正常な回復を試みますが、極度にメモリーが不足した環境のもとではシステムを強制終了せざるを得ない場合もあります。システムメモリーの制約は、特に 32 ビットのオペレーティングシステムカーネルを使用する x86 プラットフォームで厳しくなっています。

開発者向けの情報

mdb(1) のマニュアルページには、組み込み mdb 機能についての開発者向けの詳細な情報が記載されています。ヘッダーファイル <sys/mdb_modapi.h> には MDB モジュール API にある関数用のプロトタイプが入っており、SUNWmdbdm パッケージにはディレクトリ /usr/demo/mdb にあるサンプルモジュール用のソースコードが入っています。