【问题标题】:For a library, GDB does only see source in header files, whereas source in .cpp files is not available对于库,GDB 只看到头文件中的源代码,而 .cpp 文件中的源代码不可用
【发布时间】:2013-05-01 20:03:16
【问题描述】:

我正在使用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
  • 系统:Ubuntu 12.04.2 LTS 和 GNU/Linux 3.2.0-40-generic #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

【问题讨论】:

  • 库是否在调试中编译?
  • 你是否在gdb源码搜索路径中包含了库源码目录?
  • 我真的很抱歉,我很抱歉。我遵守了错误的图书馆档案。静态库的调试版本是用后缀创建的,我没有意识到这一点。过失。感谢您的帮助。感谢您的宝贵时间。

标签: c++ debugging gdb header-files


【解决方案1】:

这可能是什么原因?

要么

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

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

【讨论】:

  • 你是对的。感谢您的时间。真的很抱歉浪费了你的时间。
  • 我已经针对错误的库存档进行了编译。我正在使用 CMake 来构建库和我的程序。库的调试版本是用后缀创建的,我没有意识到这一点。非调试版本被命名为libqhullcpp.a,即使在make clean 之后它仍然保留在构建目录中。使用-g 构建的版本名为libqhullcpp_d.a。在现有构建目录中更改构建类型-DCMAKE_BUILD_TYPE=Debug 似乎不是一个好主意?
  • 我应该在问题中添加 [cmake] 标签吗?我应该修改它以使其对其他用户更有用吗?或者我应该创建另一个问题/答案对吗?在 SO 上什么是首选?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多