c++ - 将 GDB 与外部库一起使用

标签 c++ gdb

我目前正在调试一个使用外部库 ( LibFirm ) 的项目。当我调用库函数时,我无法真正看到 gdb 那里发生了什么(即我无法检查局部变量等)。

这个库是开源的,我自己编译的,所以我觉得应该也可以让gdb研究一下。怎么办?

我目前看到的是

(gdb) bt
#0  0x00994422 in __kernel_vsyscall ()
#1  0x002704d1 in *__GI_raise (sig=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2  0x00273932 in *__GI_abort () at abort.c:92
#3  0x00269648 in *__GI___assert_fail (
    assertion=0xd238f4 "_get_type_state(ctx.frame_tp) == layout_fixed", 
    file=0xd23458 "be/beabi.c", line=1879, function=0xd23d0d "modify_irg")
    at assert.c:81
#4  0x00b219e3 in ?? () from /usr/local/lib/libfirm.so.0
#5  0x00b21df0 in be_abi_introduce () from /usr/local/lib/libfirm.so.0
#6  0x00b59b77 in ?? () from /usr/local/lib/libfirm.so.0
#7  0x00b5b4a5 in be_main () from /usr/local/lib/libfirm.so.0
#8  0x0807daa0 in main (argc=3, argv=0xbffff914) at main.cc:243
(gdb) frame 8
#8  0x0807daa0 in main (argc=3, argv=0xbffff914) at main.cc:243
243                 be_main(output, "a.s");
(gdb) frame 4
#4  0x00b219e3 in ?? () from /usr/local/lib/libfirm.so.

第 8 帧看起来不错,而第 4 帧没有告诉我任何信息。我加了

dir /usr/local/include/libfirm
dir /home/thomas/Dev/foreign/libfirm

到我的 .gdbinit,所以 gdb 应该找到 lib 的头文件和源文件。

最佳答案

我不得不使用./configure --enable-debug(CFLAGS="-g"默认开启,但在其他项目中可能没有,所以提醒这个)。此外,您可能希望使用 CFLAGS="-g -O0"(而不是仅使用 -g)来保持代码的可读性。

关于c++ - 将 GDB 与外部库一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325146/

相关文章:

c++ - 如何将 Visual Studio 设置为仅使用 lib 文件?

C++:将当前时间与下一个工作时间进行比较

C++标准对与 vector 加速

python - GDB python API - 获取 gdb 的 python API 来打印有问题的行号

c - 调试时,单线程应用程序会在内核之间跳转吗?

C++ static_cast 运行时开销

c++ - 使用 libtooling 获取完全限定的模板模板参数名称

c++ - 理解堆栈跟踪

linux - 指令内存地址是否改变?

xcode - GDB 与 LLDB 调试器