简介
每个Windows用户一样,你可能已经遭受这恼人的发生一次以上:你的应用程序上工作,然后突然,没有任何合理的解释,应用程序崩溃,系统消息框出现在屏幕上,告诉该应用程序将被终止。这崩溃窗口从一个操作系统向另一个不同:在Windows 98中,例如,下面的文字是显示:"该程序执行了非法操作,将被关闭"。 Windows 2000和Windows NT中,相对于以前版本的Windows,显示的细节问题所造成的异常。例如:"在指令quot; 0x00401000quot;引用内存在quot; 0x00000000quot内存不能被写入。"
然而,有一个在所有Windows操作系统常见的事情:在这种情况下,你失去所有的工作你有自上次保存操作。背景
约有年前,写一个巨大的应用程序的同时,(约93内部项目组成),那里有大约15个线程运行不断,相互沟通,我面临的几个问题。在程序中的大部分时间,它坠毁。
这个问题大多发生在应用程序本身的错误,或在操作系统的组件或库之一。幸运的是,程序员的能力,以避免这种恼人的崩溃,用一个简单的异常处理机制。
Borland的Delphi开发工具,是一种有效的崩溃处理的很好的例子:这个工具创建的可执行文件,有一个特殊的内置异常处理例程,所以只要在Delphi程序发生异常,一个特殊的对话框的德尔福显示。此对话方块包含一些有关的问题所造成的异常信息。用户点击'OK'后,程序继续正常运行。
的Visual C(以及来自微软的其他开发工具)不提供一个像德尔福这样的自动异常处理模块,所以,如果你想避免在您的C / C + +应用程序崩溃,你必须明确地添加异常处理例程您的软件。该ExceptionTest
ExceptionTest的例子演示了如何避免应用程序崩溃,使用__try和__except语句。当您运行该示例时,你会得到一个包含2个按钮的对话框的。第一个按钮引发异常无异常处理块,这将导致应用程序立即崩溃。第二个按钮引发一个__try块内异常。当异常发生时,里面__except语句(GetExceptionInformation)函数被调用。此功能会显示一个特殊的对话框的一个有关异常的信息很少,并允许用户决定他是否要继续运行的程序或终止。用户还可以复制到剪贴板的异常信息。
历史19日,2010年4月初步postnbsp;void HandledExceptionTest()
{
__try
{
//This function causes the exception
DoException();
}
//If an exception occurs, display our exception dialog:
__except(ShowExceptionDlg(GetExceptionInformation()))
{
ExceptionFunction();
}
}
void UnhandledExceptionTest() {
//This function causes the exception.
//Because there is no exception handling here, the program will crash.
DoException();
}