質問の短いバージョン:
gdbにデバッグシンボルを使用させるにはどうすればよいlibc
ですか?
長いバージョン:
gdbを使用してプログラムをデバッグしていて、によって使用されるfutexに関する情報を確認したいlibc
。ただし、デバッグ中のある時点で、次のような出力が得られます。
Catchpoint 2 (call to syscall futex), 0x00007ffff772b73e in ?? () from /lib/libc.so.6
(gdb) bt
#0 0x00007ffff772b73e in ?? () from /lib/libc.so.6
#1 0x00007ffff767fb90 in ?? () from /lib/libc.so.6
#2 0x00007ffff767a4c0 in vfprintf () from /lib/libc.so.6
#3 0x00007ffff768565a in printf () from /lib/libc.so.6
....
info sharedlibrary
ブレークポイントでgdbを実行すると、次のように表示されます。
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x00007ffff7dddaf0 0x00007ffff7df6704 Yes (*) /lib64/ld-linux-x86-64.so.2
0x00007ffff7bc53e0 0x00007ffff7bd1388 Yes (*) /lib/libpthread.so.0
0x00007ffff79ba190 0x00007ffff79bd7d8 Yes (*) /lib/librt.so.1
0x00007ffff76538c0 0x00007ffff7766c60 Yes (*) /lib/libc.so.6
0x00007ffff6c1fd80 0x00007ffff6c303c8 Yes (*) /lib/libgcc_s.so.1
(*): Shared library is missing debugging information.
そして私が走るldd
と私は見る:
linux-vdso.so.1 => (0x00007ffff7fde000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007ffff7dbf000)
librt.so.1 => /lib/librt.so.1 (0x00007ffff7bb6000)
libc.so.6 => /lib/libc.so.6 (0x00007ffff7833000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffff7fdf000)
私はUbuntu10.04を使用していますが、libc
デバッグシンボル付きのバージョンはにあると思います/usr/lib/debug/lib
。パスの先頭にこれを配置するように変数を設定しようとLD_LIBRARY_PATH
しましたが、違いは見られませんでした。
プログラムがロードする共有ライブラリをどのように選択するか、これが実行時に設定されるのかコンパイル時に設定されるのか、完全にはわかりません(私は実行時を想定していますが、今はわかりません)。したがって、gdbにのデバッグバージョンを使用させる方法に関する情報をいただければ幸いlibc
です。