概述
2019独角兽企业重金招聘Python工程师标准>>>
简介:最近经常会碰到客户那边出现各种奇怪的问题,由于日志不可能完全记录运行信息,又或者日志回滚导致记录信息丢失等,无法定位bug出现位置,这时你非常希望自己的能够单步调试。下面是vs2008+windbg研究的结果,可能存在不完善的地方,希望牛人不吝赐教,互相学习。<br/> 补充:一般写完程序之后,自己会写一些测试用例来测试自己写的程序,进行完单元测试之后会交由测试部进行测试,但是不能够保证所有的bug都会被测试出来,多数会由客户电脑负责的环境导致程序出现一些莫名其妙的问题,废话不多说了。<br/>
调试环境
测试环境:windows 7<br/> 开发工具:vs2008, windbg6.3.9600<br/> ##调试代码## #include <stdio.h> void TestFunc(int nVar, char *pStr) { printf("juest print nVar:%d, pStr:%sn", nVar, pStr ? pStr:"null"); }
void main()
{
TestFunc(1, "hello world!");
}
##vs2008 release模式设置##
-
/Zi 该命令是生成PDB文件中包含变量名和函数名,不会影响到优化选项(生成代码时vs release版会对代码进行优化) ![在此输入图片描述][1]
-
/01 优化模式,这个会最大优化生成二进制文件大小
![在此输入图片描述][2]<br/>
- 使用以上设置使用windbg调试,设置PDB的路径,通过打开File->Symbol File Path
![在此输入图片描述][3]<br/> ![在此输入图片描述][4]<br/>
由于上传图片200kb限制,我只能分成两张图片上传,图片中你会发现,堆栈中TextFunc的参数并非我们想要看到的参数,那时候因为编译器对我么的生成文件做了优化,这时你需要通过Memory来根据参数地址去查看参数的值,如果对于软件运行速度没有太大的要求,建议设置下面的一种方式。<br/>还有就是我们只设置了Symbol符号,并没有设置Source符号,但是确显示可以看到原文件,那是因为符号文件中有记录源文件的位置,如果换台机器,那么将不会看到源文件,这是你就要设置一下源文件的路径了。<br/>
- /Od 禁用优化 可能会影响到release版本运行的速度,但对我们调试是很有帮助的,不用再去查内存
![在此输入图片描述][5]
- 这时我们再使用windbg调试,那么将会跟使用vs调试基本一样
![在此输入图片描述][6]
总结:以上就是学习windbg去调试release发行程序的方法,如果有好的方法我们可以一起学习,欢迎前来指导! [1]: http://static.oschina.net/uploads/space/2014/0527/215627_ViHU_1448554.jpg [2]: http://static.oschina.net/uploads/space/2014/0527/222824_JYXc_1448554.jpg [3]: http://static.oschina.net/uploads/space/2014/0527/223622_JnEg_1448554.jpg [4]: http://static.oschina.net/uploads/space/2014/0527/223750_MtXI_1448554.jpg [5]: http://static.oschina.net/uploads/space/2014/0527/224613_STWx_1448554.jpg [6]: http://static.oschina.net/uploads/space/2014/0527/224857_e82c_1448554.jpg
转载于:https://my.oschina.net/u/1448554/blog/269896
最后
以上就是发嗲爆米花为你收集整理的使用windbg调试release程序的全部内容,希望文章能够帮你解决使用windbg调试release程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复