我正在使用 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/