GDB堆栈跟踪不完整信息

GDB堆栈跟踪不完整信息,gdb,Gdb,我正在使用gdb调试一个C应用程序,它使用一个用C编写的已安装库。 该库作为守护进程运行,接受来自应用程序的请求并对其进行处理。 为了调试库守护进程,我将其附加到gdb中,并使用命令info sharedlibrary和add symbol file将库符号文件加载到正确的地址 我已经使用dir命令设置了源代码路径 但是堆栈跟踪仍然没有显示文件名和行号 原因可能是什么?如何摆脱它 我已经将其附加到gdb中,并使用命令info sharedlibrary和add symbol file将库符号文件

我正在使用gdb调试一个C应用程序,它使用一个用C编写的已安装库。 该库作为守护进程运行,接受来自应用程序的请求并对其进行处理。 为了调试库守护进程,我将其附加到gdb中,并使用命令info sharedlibrary和add symbol file将库符号文件加载到正确的地址

我已经使用dir命令设置了源代码路径

但是堆栈跟踪仍然没有显示文件名和行号

原因可能是什么?如何摆脱它

我已经将其附加到gdb中,并使用命令info sharedlibrary和add symbol file将库符号文件加载到正确的地址

在Linux上,附加进程应该足以让GDB从所有共享库加载符号,并且不需要添加符号文件

作为猜测,您做了如下操作:

make install COPT=-O2  # build/install optimized version of libtest.so.0
# start daemon using it
make COPT=-g  # build debug version of libtest.so.0
gdb -p <daemon-pid>
(gdb) info shared
(gdb) add-symbol-file /path/to/dbg-version/libtest.so.0 <address>
这将生成匹配的优化版本,但带有调试信息。然后可以使用addsymbolfile将GDB指向带有调试信息的优化版本


注意:调试优化的代码相对比较困难。不要期望下一个命令将您带到下一行,不要期望能够检查所有变量等。

谢谢您的回复。我使用-o0删除了优化。
make install COPT=-O2  # build/install optimized version of libtest.so.0
# start daemon using it
make COPT=-g  # build debug version of libtest.so.0
gdb -p <daemon-pid>
(gdb) info shared
(gdb) add-symbol-file /path/to/dbg-version/libtest.so.0 <address>
make COPT='-g -O2'