gcc与gdb版本兼容问题

本文记录了一次使用gdb调试C++程序时遇到的问题:无法打印局部变量。通过排查发现是由于gdb版本与gcc版本不兼容导致。升级gdb版本后问题得以解决。

今天在用gdb调试C++程序的时候,想用"p i”命令打印出程序的一个局部变量i,却一直提示:

No symbol "i" in current context.

我愣了下,想到有几种原因可能导致这种情况:

1、编译的时候没有加上-g选项,一直编译器没有在可执行程序中加入调试信息;

2、编译的时候加上了优化选项,使得编译器把某些变量优化掉了;

3、断点加的位置不对,变量超出作用域了。

我重新检查了程序以及编译命令,的确是没错的。于是我只能在程序中加了个全局变量gi,然后gdb起来,p gi,发现全局变量却是可以显示的。

google了好久都没解决问题,后来再次进入gdb准备尝试的时候,突然无意间看到当前的gdb版本是7.2。

我突然想到这台虚拟机上的CentOS 6.4自带的gcc版本貌似只有4.6.x,而之前我已经将gcc升级到了4.8.1,升级跨度还是蛮大的,是不是有可能gcc4.8.1和gdb7.2不兼容?

于是我下gdb的源码包(最新版本7.6),解压,./configure,make,sudo make install,安装过程很快,比gcc快多了。安装好之后gdb –v:

GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.

然后gdb走起,果然可以了:

(gdb) p i
$1 = 11

版本问题真够坑爹的,把问题贴出来,但愿让大家少走弯路。

转载于:https://www.cnblogs.com/codemood/p/3141256.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值