gdb 调试中No symbol “***” in current context解决方法
2015-11-15 16:35
585 查看
假设要编译的cpp(或c)为 hello.cpp:
在centOS6.5环境下运行
去网上查找很多都说g++没加-g或者是加了-O之后编译器优化掉了,都不是我这种情况。后面找到可能是g++和gdb 版本兼容问题。因为centOS6.5自带的g++编译器版本是4.6.x(可以通过
再次检查
注: 该问题是低版本的gdb无法正确解析不兼容版本的g++编译后的符号表,所以提示不存在该符号。
//hello.cpp #include <iostream> using namespace std; int main() { int i = 0; cout << i << endl; }
在centOS6.5环境下运行
$ g++ -g hello.cpp -o hello $ gdb hello ... (gdb)r ... 5 int i = 0; (gdb)p i No symbol "i" in current context
去网上查找很多都说g++没加-g或者是加了-O之后编译器优化掉了,都不是我这种情况。后面找到可能是g++和gdb 版本兼容问题。因为centOS6.5自带的g++编译器版本是4.6.x(可以通过
g++ -v查看),我升级为4.8.2,而gdb版本没有升级,为7.2(可以通过
gdb -v查看)。所以怀疑是版本问题!于是去gdb官网上下载最新版本的7.10。
# wget http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.gz # tar -xvz -f gdb-7.10.tar.gz # ./configue && make && make install
再次检查
gdb -v版本为7.10,此时用gdb调试时能正确输出变量。问题解决。
注: 该问题是低版本的gdb无法正确解析不兼容版本的g++编译后的符号表,所以提示不存在该符号。
相关文章推荐
- 系统组件:动作条ActionBar
- web服务端安全之权限漏洞
- HDOJ 3466 Proud Merchants 【0 1背包】
- java 重定向和转发的区别
- 二叉树的中序线索化以及遍历
- Map以及Set的遍历(EntrySet方法,补充enumeration和Iterator的区别)
- 浅析c#内存泄漏
- C++正则表达式处理Boost库使用
- FetchRequestController
- Object-C初体验
- Object-C初体验
- Object-C初体验
- 函数指针
- android中WebView加载网页设置进度条
- zookeeper和solr搭建集群分片查询
- C. Nearest vectors(卡精度,恶心)
- 二叉树的若干操作
- android99 拍照摄像
- SQL集合操作
- 生成N个随机数,和为1