gdb 打印变量时出现 "No symbol "i" in current context"
2017-02-10 09:18
537 查看
转载原文来自 http://blog.csdn.net/wenceng9/article/details/20002021
问题描述:,在gdb调试程序输出变量:p var,会提示
No symbol "var" in current context.
原因:
程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个
是很正常的,因为优化程序会删改程序,整理程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指令就有
不一样,也就会出现你所想象不到的结果。对付这种情况时,需要在编译程序时关闭编译优化。
解决方案:
关掉优化 GNU 的C/C++编译器
在编译是加入 ‘-gstabs+’ 选项,比如:
g++ -g -Wall -gstabs+ -o main.o main.cpp
但是我在通过上面的编译后又出现下面的问题了“No Register”这个我确实郁闷:
思考及解决方法:
If I try to do p "function::var" when the application has not started or has already exited, I do get "no registers". Are you sure that the breakpoint is hit?
所以我run了一下再print,ok了。
问题解决
PS:网上有解释是因为gcc与gdb版本不一致所导致的。
解决打印问题的时候单步执行等都正常了。
问题描述:,在gdb调试程序输出变量:p var,会提示
No symbol "var" in current context.
原因:
程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个
是很正常的,因为优化程序会删改程序,整理程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指令就有
不一样,也就会出现你所想象不到的结果。对付这种情况时,需要在编译程序时关闭编译优化。
解决方案:
关掉优化 GNU 的C/C++编译器
在编译是加入 ‘-gstabs+’ 选项,比如:
g++ -g -Wall -gstabs+ -o main.o main.cpp
但是我在通过上面的编译后又出现下面的问题了“No Register”这个我确实郁闷:
思考及解决方法:
If I try to do p "function::var" when the application has not started or has already exited, I do get "no registers". Are you sure that the breakpoint is hit?
所以我run了一下再print,ok了。
问题解决
PS:网上有解释是因为gcc与gdb版本不一致所导致的。
解决打印问题的时候单步执行等都正常了。
相关文章推荐
- git fetch 更新远程仓库到本地
- 字符集
- sql中什么时候用内连接查询,什么时候用外连接查询?用起来好像一样啊!
- gunicorn geventworker 解析
- Android 平时用到比较多的广播之飞行模式和耳机插拔
- sqlldr失败后,等待5分钟尝试重传,最多尝试5次(if while break sleep)
- centos7下mysql5.6的主从复制详解
- 插值法
- linux设备驱动归纳总结(六):2.分享中断号
- 【Java】Java反射机制及Spring BeanWrapper
- 虚拟串口完成主机与vmware下虚拟机进行串口通信
- shiro与springMVC的整合
- 浅谈XML Schema中的elementFormDefault属性
- poj2470
- 局域网内一台服务器上运行其他几台服务器上的同一名称的脚本,运行脚本时候,传递一个参数
- 安装了VCam后,VideoCapture 出问题,FileStorage fs("X.yml", FileStorage::READ)报错
- Android 和html的互相调用
- poj2453
- Equals和“==”
- Javascript之深入浅出prototype