对于库,GDB只在头文件中看到源代码,而.cpp文件中的源代码不可用

For a library, GDB does only see source in header files, whereas source in .cpp files is not available

本文关键字:源代码 文件 cpp 于库 GDB      更新时间:2023-10-16

我使用gdb来调试针对静态库编译的程序。库和程序都是用调试符号编译的。对于这个库,gdb只看到.h文件中实现的源代码,而看不到.cpp文件中实现的源代码。我想知道为什么?

    例如
  • (gdb) info sources
    

    只列出该库中的头文件,不列出.cpp文件。

  • 我能够将断点设置为在.cpp文件中实现的一些函数。例如,gdb可以理解这个命令:

    (gdb) break orgQhull::Qhull::runQhull,
    

    ,但是不可能调试该函数体中的代码。(只能使用stepi命令在汇编器级别逐级执行单个指令。)另一方面,调试器可以看到头文件中实现的函数代码。

  • backtrace命令报告前面提到的runQhull函数有"No symbol table available":

    (gdb) backtrace full
    #0  0x00000000004d361a in orgQhull::Qhull::runQhull(orgQhull::RboxPoints const&, char const*) ()
    No symbol table info available.
    #1  0x000000000049573a in ConvexHull::ConvexHull (this=0x7fffffffcb70, tree=..., begin=..., end=...)
        at /home/filip/fel/dp/sandbox/src/populating_octomap/include/ConvexHull.h:40
    

这可能是什么原因呢?欢迎提出任何建议!

一些细节:

  • 有问题的库是Qhull的libqhullcpp.a,来源在git://gitorious.org/qhull/qhull.git
  • 系统:Ubuntu 12.04.2 LTS with GNU/Linux 3.2.0-40-generic #64-Ubuntu SMP x86_64
  • gcc (Ubuntu/Linaro 4.6.3-1 Ubuntu) 4.6.3
  • GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04

这可能是什么原因呢?

    你已经构建了没有 -g标志的库,或者
  • 你在构建库之后剥离了库(这是非常不可能的)。

检查库构建日志。你相信你用-g构建了它,但是你非常可能错了。