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

时间:2013-05-01 20:03:17

标签: c++ debugging gdb header-files

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

  • 例如

    (gdb) info sources
    

    仅列出该库中的头文件,而不列出.cpp个文件。

  • 我能够将断点设置为.cpp文件中实现的某个函数。例如gdb了解此命令:

    (gdb) break orgQhull::Qhull::runQhull,
    
    但是,不能调试该函数体内的代码。 (只能使用stepi命令逐步执行汇编程序级别的单个指令。)另一方面,debuger能够查看头文件中实现的函数代码。

  • backtrace命令报告有"没有可用的符号表"对于前面提到的runQhull函数:

    (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与GNU / Linux 3.2.0-40-通用#64-Ubuntu SMP x86_64
  • gcc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3
  • GNU gdb(Ubuntu / Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04

1 个答案:

答案 0 :(得分:1)

  

这可能是什么原因?

无论

  • 您已经构建了库,但没有 -g标志或
  • 你在图书馆建成后剥离了它(这是不太可能的)。

检查您的库构建日志。您相信是使用-g构建的,但您非常可能会误会。