一致しないコアファイルをデバッグする際に、次の点に注意してください。
pathmap コマンドは '/' のパスマップを認識しないため、次のコマンドを使用できません。
pathmap / /net/core-host
pathmap コマンドの単一引数モードは、ロードオブジェクトのパス名を使用すると機能しません。 そのため、2 つの引数をとる form-path to-path モードを使用してください。
dbx ホストがコアホストと同一のバージョンまたはコアホストより最近のバージョンの Solaris オペレーティング環境を有している場合、コアファイルのデバッグが良好に機能する傾向にあります。ただし、これは必須ではありません。
必要となるシステムライブラリを次に示します。
実行時リンカーの場合 :
/usr/lib/ld.so.1
/usr/lib/librtld_db.so.1
/usr/lib/64/ld.so.1
/usr/lib/64/librtld_db.so.1
スレッドライブラリの場合 (使用しているスレッドの実装に依存します):
/usr/lib/libthread_db.so.1
/usr/lib/64/libthread_db.so.1
/usr/lib/lwp/libthread_db.so.1
/usr/lib/lwp/64/libthread_db.so.1
/usr/lib/lwp ファイルは、Solaris 8 オペレーティング環境で dbx を実行してい て、別の libthread ライブラリを使用している場合にだけ適用されます。
dbx を 64 ビット対応バージョンの Solaris OS で実行している場合は、これらのシステムライブラリはターゲットプログラムではなく dbx の一部として読み込まれて使用されるため、64 ビットバージョンの xxx_db.so ライブラリが必要です。
ld.so.1 ライブラリは、libc.so などのライブラリのコアファイルイメージの一部であるため、コアファイルを作成したプログラムに一致する 32 ビットまたは 64 ビットの ld.so.1 ライブラリが必要です。
スレッド化されたプログラムからコアファイルを調べていて、および where コマンドがスタックを表示しない場合、 lwp コマンドを使用してみてください。次に例を示します。
(dbx) where 現スレッド: t@0 [1] 0x0(), at 0xffffffff (dbx) lwps o>l@1 シグナル SIGSEGV 現在の関数 _sigfillset() (dbx) lwp l@1 (dbx) where =>[1] _sigfillset(), "lo.c" の 2 行目 [2] _liblwp_init(0xff36291c, 0xff2f9740, ... [3] _init(0x0, 0xff3e2658, 0x1, ... ... |
lwp コマンドの -setfp および -resetfp オプションは、LWP のフレームポインタ (fp) が壊れているときに便利です。これらのオプションは、assign $fp=... が利用できないコアファイルのデバッグ時に機能します。
スレッドスタックの欠如は、thread_db.so.1 に問題があることを示している場合があります。 そのため、コアホストから正しい libthread_db.so.1 ライブラリをコピーしてください。