现在位置: 首页 > 程序崩溃
    对这些东西的研究起始于项目中一个Prototype的开发。这个Prototype就是给我们的产品加上Log信息。既然是Log信息,那么在应用程序崩溃的时候也要记录发生了什么而导致程序崩溃,而且这个信息对于开发人员来说是非常重要的。为此,在网上搜索了大量的资料来看,英文的中文的,再加上MSDN和那本砖头书《Windows via C/C++》,总算是把Windows下软件开发中对致命异常的处理给搞清楚了。按照我以前的习惯,把学到...
阅读全文
    在上篇文章《让程序在崩溃时体面的退出(5):SEH+Dump文件》介绍了怎样用SEH加上Dump文件来避免程序的崩溃并在程序崩溃时创建Dump文件来帮助定位出现异常的代码行。可是只有try/except块中try块中的代码出现异常才能被捕捉到,try块外面的代码出现异常,程序照样会崩溃。         下面用《让程序在崩溃时体面的退出(5):SEH+Dump文件》文中的代码为例子来说明。 /...
阅读全文
    在上篇文章《让程序在崩溃时体面的退出(4):SEH》中讲解了SEH中try/except可以捕捉异常,避免程序的崩溃,并且可以在处理完异常之后,还能决定进该进程如何执行。对于应用程序的使用者来说,并不知道异常的发生。但是对于软件的开发者来说,虽然避免了程序的崩溃,可是这样可以让程序崩溃的缺陷存在于代码中,就像一个定时炸弹,不知道什么时候会爆炸。要想修复这样的缺陷,首先要找到导致程序崩溃的那行...
阅读全文
    SEH的全称是Structured Exception Handling,是Windows操作系统提供的一种异常处理方式。SEH是属于操作系统的特性,不为特定语言设计,从它的名字就能看出它是一种结构化的异常处理方式。SEH包括了2个部分:终止处理__try/__finally和异常处理__try/__except,下面分别进行介绍。 相关阅读 ----让程序在崩溃时体面的退出(3):Dump文件         终止处理__try/__finall...
阅读全文
     在我的那篇《让程序在崩溃时体面的退出(2):CallStack》中提供了一个在程序崩溃时得到CallStack的方法。可是要想得到CallStack,必须有pdb文件的支持。但是一般情况下,发布出去的程序都是Release版本的,都不会附带pdb文件。那么我们怎么能在程序崩溃的时候找到出错的具体位置呢?这个时候就该Dump文件出场了!Dump文件是进程的内存镜像,可以把程序运行时的状态完整的保存下来。   ...
阅读全文
     在我的那篇《让程序在崩溃时体面的退出之Unhandled Exception》中提供了一个捕捉程序崩溃事件的方法,可以添加代码在程序崩溃的时候做出适当的处理。不过,只知道程序在什么时候崩溃,但是不知道为什么崩溃,这对于程序开发者来说没有任何意义。因为如果不知道程序崩溃的原因,就没法去找到代码中的缺陷,当然就没法去修改代码而避免程序的崩溃。     所有调试过代码的开发者都知道Cal...
阅读全文
     程序是由代码编译出来的,而代码是由人写的。人非圣贤,孰能无过。所以由人写的代码有缺陷是很正常的。当然很多异常都在开发阶段被考虑到而添加了处理代码,或者用try/catch对可能出现异常的地方进行额外的照顾。可是,还是会有一些无法预料的异常(Unhandled Exception)在程序运行的时候出现。这些异常很多时候都会招致程序的崩溃。那么有没有什么方法可以让程序在崩溃的时候体面的退出呢?答案是肯...
阅读全文
我们可以总结一下一些随机常见的崩溃原因: 1. 不确定的变量:程序使用了随机的数字或变量组件,在程序执行时没有被很好的确定范围。如:用户输入,随机数,或时间。 2.内存泄漏:程序每次执行时都内存溢出。每次运行程序崩溃的罪魁祸首是随机的,因为它依赖于在特定时间运行的进程数。包括堆溢出或者是栈异常。 程序依赖于其它外部应用也可能导致崩溃。如果我们的应用依赖于一个系统某些系统属性,他们被另一个程序修改,那么...
阅读全文
2k以上的操作系统,微软提供了一种新的功能Online Crash Analysis,简称OCA,就是当程序崩溃的时候我们看到的的那个对话框,问你是否把崩溃的一些信息发送到微软,各个软件厂商可以从微软那里根据收集到的程序版本和出错的地址等信息来完善自己的程序。 如果你手头什么小工具都没有的情况下,下面这个方法可以很快的手工定位到出错地点。 点击“请单击此处”,可以看到详细的信息。 其中AppName是出错程序的exe文件名,AppVer是e...
阅读全文