我正在编译带有调试符号的程序,该程序链接到也使用调试符号编译的共享库(liballegro)。当我尝试进入这个共享库的功能时,我看不到任何代码。如何调试使用调试信息编译的共享库
file myBin
mybin: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d4133ef127e81ffb007c4c17e10f4ddaefac6a0f, with debug_info, not stripped
file lib/liballegro-debug.so
liballegro-debug.so.5.2.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=dd75ca87e0ed86832ed02a1c40548a055ad4f551, with debug_info, not stripped
GDB显示了这种LIB是如何加载调试信息:
(gdb) info shared
From To Syms Read Shared Object Library
0x00007ffff7dd9b40 0x00007ffff7df5110 Yes (*) /lib64/ld-linux-x86-64.so.2
0x00007ffff7a5a0d0 0x00007ffff7b84591 Yes correct/path/to/liballegro-debug.so
0x00007ffff76ffd60 0x00007ffff7778eef Yes (*) /usr/lib/libm.so.6
0x00007ffff74e1640 0x00007ffff74eefb1 Yes (*) /usr/lib/libpthread.so.0
[...]
所以我把一个断点在函数调用谁住在共享库(al_load_bitmap):
90 level->tileset.parent = al_load_bitmap(filename);
al_load_bitmap的源代码位于文件路径/ to/src/bitmap_io.c其在gdb 的输出中列出信息来源
和步骤到它:
(gdb) si
0x0000555555555f00 in [email protected]()
在这一点上我不明白怎么看这个函数的源代码,列表 COMAND显示什么。
如何调试此功能内发生的事情?
PD:我也试过lldb,结果是一样的,所以我错过了一些东西。
谢谢。