dump文件的调试

来源:互联网 发布:邮箱大师mac版本下载 编辑:程序博客网 时间:2024/05/01 21:13

这段时间突然发现,要一下做一个金刚不坏之身的程序是不太可能滴,至于对我来说吧。
这个程序也要经过千锤百炼才能够练就一个强大的自信心。

我现在做系统就不考虑一下把程序做的足够强壮了,因为我也做不到大哭,现在做系统时,总考虑的一个问题:

当系统异常的时候怎么去处理?

我不怕系统程序出现异常,甚至直接Over,只要能在异常时处理异常后继续运作,在崩溃重启后能够继续把没

干的活给干了,那么这个在我能够承受的范围内,也在大多数客户的承受范围内,因为这样就是我们所说的将

损失减小到最低,其实是不是最低只有自己能够知道。

当然了,我更希望能够做出一个健壮无比的牛逼程序,所以我想知道程序是在什么情况下崩溃的,可是有些问题

你懂的,老在客户机器上或者生产环境下出现,却在自己的机器上和测试环境就他妈的不出现,遇见这种情况我是

跳楼或者杀人的心情都有了,偶尔我也犯过情绪,想提出辞职申请,换个行业去,告别这苦逼的程序员生涯,

可总不知道是什么力量支持着我,让我坚强依旧滴做着程序员,过着狗日的日子。

后来,不经意间,一位同事给我说了一个种在系统中异常或者崩溃的时候,来生成dump文件,然后用调试器来调试。

这样就可以在生产环境中的dmp文件,拷贝到自己的开发机器上,调试就可以找到错误的位置,配合程序调试符号pdb文件,

直接可以定位到源代码中位置,真是太他妈的神奇了,虽然Release版本下的很多变量的值是不对滴,但并不影响我这个

这么有执着心的coder来找bug。

同事给了我他写的示例,往空指针拷贝数据,在非调试下运行后,果然的崩了,果断滴生成了一个扩展名为dmp的文件,

然后他用vs2010打开那个dmp文件,vs2010很果断滴定位到了那个往空指针拷贝数据那里。

看他那娴熟的操作,顿时感觉到了他的强大和微软的牛逼。

后来我就学他,在程序中加入程序异常时产生dump文件的功能,待系统发布后,在一次不经意间一个程序挂掉了。

在客户的谩骂中,我面带笑容说:这个问题很好解决。我满怀信心滴从服务器上拷贝了程序崩溃产生dump文件,

然后学着那个同事用vs2010打开,我了个去,咋没有定位到源代码中内,只定位到了可执行文件的一个地址,这让哥

情何以堪呐!

还好,我对pdb了解还比较熟悉,想来应该是符号文件的问题,于是就开始摸索的,不经意见的在

堆栈处右击了下,发现菜单里竟然有“加载符号”,而且还有“符号路径”,我想这大概就是让我来选择

对应的pdb文件吧,顿时感觉曙光就在前面。

点击了“符号路径”后如下图:

才发现了,它并不是来选择符号文件,而是选择对应的可执行程序的路径,选择了后果断滴定位到了源代码的位置,

才发现一个很简单很美丽的bug,修改后,在测试后重现发布,系统的健壮性又提高了一个台阶。

回头想了想,我同事给我演示的时候,他程序运行的目录和就是他直接用vs2010生成的目录,所以此种情况下

用vs2010打开dmp文件即可定位到源代码文件。而发布后的程序,一般情况下你根本不知道别人放在什么地方去执行的,

因此调试时还并必须选相同版本的可执行文件,然后pdb文件才会好好工作,要不没可执行文件,咋个调试嘛。

哎,这同事,居然还留了一手,坑爹啊。

不过还是要感谢他滴,我又掌握了一些东西,又增强了我这个苦逼程序员写好程序的信心。

在写这个之前看了相关文章,感觉比较好的推荐一哈:

http://www.cppblog.com/woaidongmao/archive/2011/05/10/146086.html

0 0