我是靠谱客的博主 发嗲爆米花,最近开发中收集的这篇文章主要介绍使用windbg调试release程序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

简介:最近经常会碰到客户那边出现各种奇怪的问题,由于日志不可能完全记录运行信息,又或者日志回滚导致记录信息丢失等,无法定位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程序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部