【发布时间】: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