关于gcc编译产生可调试文件的打印变量问题
2015-10-16 21:58
344 查看
最近写了一个小程序,内部变量的改变自己不是很清楚,所以想使用gdb调试器来查看变量的改变过程,进而对其有一个更好地把握。
但是在gcc编译加上-g选项后,进入gdb调试,却怎么也打印不出来变量的值,最初是出现No symbol "xxx" in current context
后来经过查资料后,了解到这个可能是由于gcc编译的时候优化造成的,对局部变量进行寄存器存值运算,以及变量是否涉及到公共子表达式的问题
后来,我在编译的时候加上了-O0 这个选项(前面是大O,后面是零),然后再进行测试,可是结果还是No symbol "xxx" in current context
再后来,我在网上了解到了-gstabs+这个选项,而对于这个选项,解释是:以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.
对于stabs格式,我又进行了一番调查,发现,他是一个做调试信息的东西,调试信息包含了源文件的行号,类型变量,函数,以及他们的
参数,作用域等。而这些东西是被放在.stab后面的,这些调试信息分布在生成代码的各处,最后,汇编器将这些目标文件中的符号表和
字符串表映射到调试信息中。这样生成的调试文件,就要使用-gstabs+这个选项。
在我将此选项加在gcc后,这下,得到了不同的结果,但是,却和我想要的结果大相近庭,结果是一个和实际不符合的数,一看就是一个随机数 ,可是这个数字明显是已经初始化的值。
最后,另一个选项-gdwarf-2
这个选项吸引了我,这个选项的解释是:产生DWARF version2 的格式的调试信息,常用于IRIXX6上的DBX调试器.GCC会使用DWARF version3的一些特性.
可以指定调试信息的等级:在指定的调试格式后面加上等级:
如: -ggdb2 等,0代表不产生调试信息.在使用-gdwarf-2时因为最早的格式为-gdwarf2会造成混乱,所以要额外使用一个-glevel来指定调试信息的 等级,其他格式选项也可以另外指定等级.
-gdwarf这个选项,后面的等级如果为1
的话是不支持的,为2 可以达到效果,经尝试,为3亦可以达到效果。
当加上这个选项后,结果明显正确了,原来是调试格式信息的不同还有等级的不同会影响到最后调试的过程,gcc这个编译器有很多的选项,对于调试信息的输出也有很多中格式,以后还要多多了解。
但是在gcc编译加上-g选项后,进入gdb调试,却怎么也打印不出来变量的值,最初是出现No symbol "xxx" in current context
后来经过查资料后,了解到这个可能是由于gcc编译的时候优化造成的,对局部变量进行寄存器存值运算,以及变量是否涉及到公共子表达式的问题
后来,我在编译的时候加上了-O0 这个选项(前面是大O,后面是零),然后再进行测试,可是结果还是No symbol "xxx" in current context
再后来,我在网上了解到了-gstabs+这个选项,而对于这个选项,解释是:以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.
对于stabs格式,我又进行了一番调查,发现,他是一个做调试信息的东西,调试信息包含了源文件的行号,类型变量,函数,以及他们的
参数,作用域等。而这些东西是被放在.stab后面的,这些调试信息分布在生成代码的各处,最后,汇编器将这些目标文件中的符号表和
字符串表映射到调试信息中。这样生成的调试文件,就要使用-gstabs+这个选项。
在我将此选项加在gcc后,这下,得到了不同的结果,但是,却和我想要的结果大相近庭,结果是一个和实际不符合的数,一看就是一个随机数 ,可是这个数字明显是已经初始化的值。
最后,另一个选项-gdwarf-2
这个选项吸引了我,这个选项的解释是:产生DWARF version2 的格式的调试信息,常用于IRIXX6上的DBX调试器.GCC会使用DWARF version3的一些特性.
可以指定调试信息的等级:在指定的调试格式后面加上等级:
如: -ggdb2 等,0代表不产生调试信息.在使用-gdwarf-2时因为最早的格式为-gdwarf2会造成混乱,所以要额外使用一个-glevel来指定调试信息的 等级,其他格式选项也可以另外指定等级.
-gdwarf这个选项,后面的等级如果为1
的话是不支持的,为2 可以达到效果,经尝试,为3亦可以达到效果。
当加上这个选项后,结果明显正确了,原来是调试格式信息的不同还有等级的不同会影响到最后调试的过程,gcc这个编译器有很多的选项,对于调试信息的输出也有很多中格式,以后还要多多了解。
相关文章推荐
- 整理iOS9适配中出现的坑(图文)
- 莫比乌斯反演
- jQuery函数的第二个参数获取指定上下文中的DOM元素
- 打造专业外观-九宫图
- CV学习重要资源
- 定量/高光谱遥感之——概述
- Swift动态获取成员变量及对象关联
- 更改Jenkins的主目录
- Volley使用指南第二回(来自developer.android)
- 烧钱时代终结!O2O还能玩啥花样?
- java,android中网络数据获取和json解析
- mysql 学习记录(十三)--事务与表锁
- 《大富翁手机游戏开发实战--基于Cocos2d-x 3.2引擎》现已登陆各大网络销售平台发售
- UNIX网络编程 卷2 源代码环境搭建
- OpenGL光照阴影算法的实现
- Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题(包括三篇参考文章)
- PIC16SCM设置不同IO功耗端口状态的影响
- oracle 常用系统表
- iOS:核心动画之关键帧动画CAKeyframeAnimation
- Dbgview 罕见的一次报错问题解决