【问题标题】:How to Determine Which Shared Library a Function Belongs to in gdb?如何确定gdb中的函数属于哪个共享库?
【发布时间】:2014-07-09 21:35:30
【问题描述】:

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

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

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

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

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

反正不用这个手动过程直接看库吗?

【问题讨论】:

  • 有另一种方法代替信息符号。 see

标签: gdb shared-libraries callstack


【解决方案1】:

您可以使用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 抱怨。
  • 如何通过地址(即查找当前帧的库)?
猜你喜欢
  • 1970-01-01
  • 2020-04-28
  • 2014-03-29
  • 2017-07-10
  • 2022-06-17
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多