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

标签 c++ debugging gdb header-files

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

  • 例如

    (gdb) info sources
    

    仅列出该库中的头文件,没有 .cpp 文件。

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

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

    但是,无法调试该函数体内的代码。 (只能使用 stepi 命令逐步执行汇编程序级别的各个指令。)另一方面,调试器能够看到头文件中实现的函数代码。

  • 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
  • 系统:带有 GNU/Linux 3.2.0-40-generic#64-Ubuntu SMP x86_64 的 Ubuntu 12.04.2 LTS
  • gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
  • GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04

最佳答案

What could be the reason for this?

要么

  • 您构建的库没有 -g 标志,或者
  • 您在构建后剥离了库(这不太可能)。

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

关于c++ - 对于库,GDB 只能看到头文件中的源代码,而 .cpp 文件中的源代码不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325562/

相关文章:

iphone - 一个 hello world 应用程序,但导致错误 "image not found"

c - 使用 GDB : I crash (segfault). 我怎样才能看到导致它的代码行?

c++ - 在条件变量上调用 notify 时互斥量是否被解锁?

c++ - 对象切片和隐式类型转换

.net - 不能在另一个项目的 dll 中使用一个类的 typedef

c++ - mac 上 gdb 7.6 断言缺少调用堆栈帧

debugging - gdb如何向后检查内存

c++ - shared_ptr::unique() 是否表明只有一个线程拥有它?

debugging - 如何在 Webkit 检查器中保持 "Elements"(DOM) 树打开?

delphi - 如何在 Delphi 中调试从 DLL 调用的 DLL