代码之家  ›  专栏  ›  技术社区  ›  Bungow

如何调试使用调试信息编译的共享库

  •  5
  • Bungow  · 技术社区  · 8 年前

    我正在用调试符号编译一个程序,该程序链接到一个共享库(liballegro),该库也用调试符号编译。当我尝试进入这个共享库的函数时,我看不到任何代码。

    file myBin 
    mybin: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d4133ef127e81ffb007c4c17e10f4ddaefac6a0f, with debug_info, not stripped
    
    file lib/liballegro-debug.so
    liballegro-debug.so.5.2.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=dd75ca87e0ed86832ed02a1c40548a055ad4f551, with debug_info, not stripped
    

    (gdb) info shared
    From                To                  Syms Read   Shared Object Library
    0x00007ffff7dd9b40  0x00007ffff7df5110  Yes (*)     /lib64/ld-linux-x86-64.so.2
    0x00007ffff7a5a0d0  0x00007ffff7b84591  Yes         correct/path/to/liballegro-debug.so
    0x00007ffff76ffd60  0x00007ffff7778eef  Yes (*)     /usr/lib/libm.so.6
    0x00007ffff74e1640  0x00007ffff74eefb1  Yes (*)     /usr/lib/libpthread.so.0
    [...]
    

    90      level->tileset.parent = al_load_bitmap(filename);
    

    al_load_位图的源代码位于文件路径/to中/ src/bitmap\u io.c 这列在gdb的输出中 信息来源

    并进入其中:

    (gdb) si
    0x0000555555555f00 in al_load_bitmap@plt ()
    

    列表 comand什么也不显示。

    如何调试此函数内部发生的事情?

    非常感谢。

    1 回复  |  直到 5 年前
        1
  •  5
  •   Florian Weimer    8 年前

    al_load_bitmap@plt 是PLT存根(位于主程序中,而不是共享对象),它没有调试信息。您需要跳过几个指令,然后才能到达实际的函数,希望其中包含调试信息。如果延迟绑定处于活动状态,您也可能会遇到动态链接器(可以使用 LD_BIND_NOW=1

    由于这些原因,使用 s step )输入函数的命令(如果被调用的函数具有调试信息)。

    有些情况下 file 文件 报告为 未剥离 ).