function - GDB 回溯不显示函数名称

标签 function gdb names backtrace

我在 SunOS 5.10 上使用 -g -O0 编译了我的库(特别是 protbuf-2.3.0 )。

make 日志中的示例行是这样的:

/bin/bash ../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..    -D_REENTRANT -pthreads -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare  -g -O0 -MT text_format.lo -MD -MP -MF .deps/text_format.Tpo -c -o text_format.lo `test -f 'google/protobuf/text_format.cc' || echo './'`google/protobuf/text_format.cc
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -D_REENTRANT -pthreads -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -g -O0 -MT text_format.lo -MD -MP -MF .deps/text_format.Tpo -c google/protobuf/text_format.cc  -fPIC -DPIC -o .libs/text_format.o

然后,我使用以下步骤附加了我的 gdb:

  1. 运行我的应用程序(在本例中,我的 Web 服务器启动一个 Java Web 应用程序,该应用程序在启动期间通过 jni 使用库)。
  2. 我通过 gdb -p XXX 将 gdb 连接到该进程(其中 XXX 是我从 ps 获得的 pid)。
  3. 然后我在 gdb 提示符下使用 file libprotobuf.so 从 gdb 加载了我的库。

但是我无法从 bt 中看到我的函数名称。我的 GDB backtrace 命令显示如下内容:

(gdb) bt 
#0  0xf8f98914 in ?? ()
#1  0xf8f98830 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

我还尝试仅执行#1和#2,仅执行#1和#3,以及执行#1和gdb libprotobuf.so -p XXX

除此之外,我还尝试在 Debug模式下运行 jvm,并在 System.loadLibrary(..) 命令上添加一个断点,在单步执行该命令后,我执行了 gdb再次进行附件处理......但仍然没有任何结果。

但是,我可以在给定函数名称的情况下放置断点,并通过 list 列出函数的内容。但话又说回来,我可以放置断点,但它们不会在这些函数名称上停止(我知道它会转到该函数,因为每次 jvm 崩溃后它都在 jvm hs_err_pid 报告中)。

有什么想法吗?它没有向我显示我的函数名称?

最佳答案

问题很可能是 GDB 不知道如何找出给定 PID 的完整可执行路径。如果它确实知道完整路径,您就不需要执行步骤#3——GDB 会自动添加它。

您可以使用(gdb) info file命令验证GDB是否正确推断出可执行文件名称。

如果我的猜测是正确的,请通过像这样调用它来帮助 GDB:

  gdb /path/to/java <PID>

这应该立即解决您的所有问题。

关于function - GDB 回溯不显示函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2408333/

相关文章:

gdb - NASM 和 GDB 符号 : "Can' t find any code sections in symbol file. "

c++ - 可以将标准 GDB 调试器与 Qt 可执行文件一起使用吗?

arrays - 批处理脚本 - 在 For 循环中创建动态变量名称或数组

python - 为什么 "mutable default argument fix"语法这么难看,python 新手问

r - 如何测试多个 CSV 中是否存在某些列名称

r - 如何创建使用Apply(或创建函数)将字符日期跨多列日期转换为R中的日期

function - 将多个参数传递给Powershell中的函数变量

function - 人工智能/机器学习项目使用什么语言

gdb - 在使用 mingw-w64 编译的 cygwin windows 中调试 32 位二进制文​​件

python - 有没有办法获得装饰器包装的功能?