Solaris モジューラデバッガ

スレッドのサポート

MDB は、ターゲットに関連する各スレッドのスタックとレジスタを調査する機能を提供します。持続的な「スレッド」変数には、現在の代表スレッド識別子が入っています。スレッド識別子の書式はターゲットによって異なります。::regs dcmd と ::fpregs dcmd を使用すると、代表スレッドのレジスタセットや、別のスレッドのレジスタセットが現在利用できる場合はそのレジスタセットを調査できます。さらに、代表スレッドのレジスタセットは名前付き変数セットとしてエクスポートされます。1 つまたは複数のレジスタの値を変更するには、対応する名前付き変数に > dcmd を適用します。

MDB カーネルターゲットは、対応する内部スレッド構造体の仮想アドレスを指定されたスレッドの識別子としてエクスポートします。このアドレスは、オペレーティングシステムのソースコード内の kthread_t データ構造体に対応しています。kmdb を使用しているときは、kmdb を実行している CPU の CPU 識別子が cpuid 変数に格納されます。

MDB プロセスターゲットは、ネイティブな lwp_* インタフェース、/usr/lib/libthread.so、または /usr/lib/libpthread.so を使用するマルチスレッド化されたユーザープロセスの検査に対する適切なサポートを提供します。動作中のユーザープロセスをデバッグするとき、MDB はシングルスレッド化されたプロセスが libthreaddlopen または close するかどうかを検出して、動作中のユーザープロセスのスレッド化モデルのビューを自動的に調整します。プロセスターゲットスレッド識別子は、アプリケーションが使用するスレッド化モデルに基づいて、代表スレッドの lwpid_tthread_t、または pthread_t に対応付けられます。

MDB がユーザープロセスターゲットをデバッグしているとき、コンパイラによってサポートされるスレッドに局所的な記憶領域をターゲットが利用している場合、MDB は自動的に、スレッドに局所的な記憶領域を参照するシンボル名を、現在の代表スレッドに対応する記憶領域のアドレスで評価します。::tls 組み込み dcmd を使用すると、代表スレッド以外のスレッドのシンボルの値も表示できます。