如何确定gdb中函数所属的共享库?

jon*_*_ou 10 callstack gdb shared-libraries

当我从gdb获取callstack时,我只获取函数名和源文件信息.

(gdb) f
#0  main (argc=1, argv=0xbffff1d4) at main.c:5

我没有得到该函数所属的共享库或应用程序.

在Windows上,Windbg或Visual Studio将显示带有"myDll!myFunc"格式的callstack,该格式显示该函数属于哪个模块.

目前在gdb中,我使用"info address [function]"来获取函数符号的地址,然后使用"info share"手动查找函数在内存中的范围,以确定它所在的库.

无论如何直接看图书馆没有这个手动过程?

Ser*_*kov 16

你可以用info symbol.它打印函数的库名称.

像这样:

(gdb) info symbol f
f(double) in section .text of libmylib_gcc.so

(gdb) info symbol printf
printf in section .text of /lib64/libc.so.6
Run Code Online (Sandbox Code Playgroud)

  • 我发现我无法使用此方法查看虚拟方法。如果符号是类中的虚函数,则 gdb 会抱怨。 (2认同)