gdb - 如何确定 gdb 中的函数属于哪个共享库?

标签 gdb shared-libraries callstack

当我从 gdb 获取调用堆栈时,我只获取函数名和源文件信息。

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

我不知道该函数属于哪个共享库或应用程序。

在 Windows 上,Windbg 或 Visual Studio 将显示具有“myDll!myFunc”格式的调用堆栈,它向您显示该函数属于哪个模块。

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

无论如何,无需此手动过程即可直接查看库?

最佳答案

您可以使用 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

关于gdb - 如何确定 gdb 中的函数属于哪个共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23779867/

相关文章:

javascript - 调用栈增加javascript

formatting - 使用 GDB 调试 Rust 程序时,如何使用格式打印?

sharepoint - 如何在SharePoint 2010中看到异常调用堆栈?

c++ - main 的堆栈帧是否有保存的帧指针和保存的返回地址?

go - 第三方库(闭源)

c - 无法从与共享库链接的 C 程序访问全局程序集标签数​​据

CMAKE 没有为内部共享库制定目标的规则

c++ - gdb 地址和 "real"地址之间的区别?

debugging - GDB:看看某个地址的程序集?

c - 没有名为 main.c 的源文件。 gdb断点设置