我正在调试使用外部库(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的头文件和源文件。
答案 0 :(得分:0)
我必须使用./configure --enable-debug
(默认情况下CFLAGS="-g"
已启用,但它可能不在其他项目中,因此提醒一下)。此外,您可能希望使用CFLAGS="-g -O0"
(而不仅仅是-g
)来保持代码的可读性。