代码之家  ›  专栏  ›  技术社区  ›  Thomas Schaub

将gdb与外部libs一起使用

  •  1
  • Thomas Schaub  · 技术社区  · 16 年前

    我当前正在调试使用外部库的项目( 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的头文件和源文件。

    1 回复  |  直到 16 年前
        1
  •  0
  •   Thomas Schaub    16 年前

    我不得不使用 ./configure --enable-debug ( CFLAGS="-g" 默认情况下是启用的,但它可能不在其他项目中,因此请提醒此项目)。此外,您可能想使用 CFLAGS="-g -O0" (而不仅仅是 -g )以保持代码可读。

    推荐文章