对于库,GDB只在头文件中看到源代码,而.cpp文件中的源代码不可用
For a library, GDB does only see source in header files, whereas source in .cpp files is not available
我使用gdb
来调试针对静态库编译的程序。库和程序都是用调试符号编译的。对于这个库,gdb
只看到.h
文件中实现的源代码,而看不到.cpp
文件中实现的源代码。我想知道为什么?
- 例如
(gdb) info sources
只列出该库中的头文件,不列出
.cpp
文件。我能够将断点设置为在
.cpp
文件中实现的一些函数。例如,gdb
可以理解这个命令:(gdb) break orgQhull::Qhull::runQhull,
,但是不可能调试该函数体中的代码。(只能使用
stepi
命令在汇编器级别逐级执行单个指令。)另一方面,调试器可以看到头文件中实现的函数代码。backtrace
命令报告前面提到的runQhull
函数有"No symbol table available":(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 with GNU/Linux 3.2.0-40-generic #64-Ubuntu SMP x86_64
- gcc (Ubuntu/Linaro 4.6.3-1 Ubuntu) 4.6.3
- GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
这可能是什么原因呢?
- 你已经构建了没有
- 你在构建库之后剥离了库(这是非常不可能的)。
-g
标志的库,或者检查库构建日志。你相信你用-g
构建了它,但是你非常可能错了。
相关文章:
- 如何在源代码中包含外部库的头文件?
- 为什么将函数体放置在单独的源代码文件而不是标题中的C/C 中
- C++程序行为取决于源代码文件集
- 尽管进行了设置,Visual Studio仍无法打开源代码文件
- 无法打开源代码文件 "afxwin.h" / "afxext.h" / "afxdisp.h" / "afxdtctl.h" / "afxcmn.h" /afxdisp.h 等
- Qt自动生成的表单提供了错误的源代码文件路径
- 带有多个MySQL源代码文件的GDB
- 可视化 如何在项目中使用多个C++源代码文件
- 如何标记c++源代码文件(转换为标记序列)
- 如何在Visual Studio中的项目之间共享C++源代码文件
- 如何?:将cv::Mat定义为类成员,然后在源代码文件中对其进行修改
- 使用大型源代码文件的IDE建议
- Intellisense不能开放源代码文件"*.h"
- Visual Studio 2010 - 无法打开源代码文件 <QtGui/QApplication>
- 为什么致命错误C1083:不能打开源代码文件(vc++)
- 智能感知:无法在C++中打开"curl.h"的源代码文件
- 用于比较给定两个源代码文件的同一c++函数的两个版本的工具
- 如何在Makefile中根据多个源文件各自的头依赖关系构建多个源代码文件
- 我怎么能把这个qt程序到一个源代码文件
- Visual Studio 2012始终编译所有源代码文件