我们在使用程序过程中,经常会遇到如下的警告
在点击确定之后,出错的程序便退出了,这是由于当 Windows中出现程序错误时,系统将搜索错误处理程序。程序错误处理程序处理程序运行过程中出现的错误。如果系统找不到程序错误处理程序,系统将验证是否该程序当前没有被调试,并认为错误没有被处理。然后系统通过在“注册表编辑器”中查找程序错误调试程序来处理尚未处理的错误。默认情况下点击确定即终止程序的运行,为了查找程序出错的原因,可以利用系统的特性,借助drwtsn32工具,来获得更多的程序出错时的信息,帮助查找定位错误。
系统在“注册表编辑器”的注册表项 \\HKEY_LOCAL_MACHINE\Software\Microsoft\
Windows NT\CurrentVersion\AeDebug下查找名为 Debugger 和 Auto的项。Debugger 项的值指定了调试程序将要用来分析程序错误的命令。如果找到了调试程序项的值,系统将查看 Auto项的值是设置为 0 还是 1。
如果 Auto项的值设置为 0,系统将产生一个消息框,通知您发生了程序错误。如果“调试程序”项的值指定了有效调试程序所使用的命令,消息框将显示两个按钮:“确定”和“取消”。如果单击“确定”,程序将终止。如果单击“取消”,系统将启动指定的调试程序。如果“调试程序”项的值为空,消息框将只显示“确定”,并且不启动任何调试程序。
如果 Auto项的值设置为 1,并且调试程序项的值指定了有效调试程序所使用的命令,系统将自动启动该调试程序,并且不会产生消息框。
当在系统上安装 Windows时,默认情况下 Auto 项的值设置为 1,并且调试程序项的值指定了启动drwtsn32的命令。这意味着当出现程序错误时,drwtsn32将自动诊断错误,并记录相应的诊断信息。
如果您使用的默认调试程序不是drwtsn32,而又要换用drwtsn32,请在命令提示符后键入命令 drwtsn32 -i来设置drwtsn32为默认错误处理程序。点击开始->运行,如下图所示:
点击确定后如下图所示:
点击开始->运行,如下图所示:
打开drwtsn32主界面进行相应的设置,点击确定后如下图所示:
日志文件路径指定drwtsn32处理错误时日志的记录位置。
故障转储指定drwtsn32生成的dmp文件名,该文件可以被调试工具打开,以二进制形式保存了程序出错时的一些重要信息。
故障转储类型表示生成的dmp文件中记录信息量的多少。
转储符号表表示如果程序中包含了调试符号,将保存到LOG文件中。
转储全部线程上下文表示是否将出错程序运行时所有的线程信息进行保存。
附加到现有日志文件表示是否将诊断信息以追加的方式保存到日志文件中。
视觉通知表示在程序出错时,是否显示诊断程序提示消息框。
声音通知表示是否发出警告声。
创建故障转储文件表示是否生成dmp文件,此项一定要勾选。
点击确定即可使设置生效。
设置了drwtsn32为默认错误处理程序后,当程序出错时,将显示如下提示框:
由于drwtsn32的运行机制,这个时候需要稍等几秒钟,让drwtsn32有时间来创建dmp文件,点击确定后,将会在drwstsn32指定的日志文件路径生成drwtsn32.log日志文件,同时生成指定的故障转储dmp文件。
故障转储文件可以用VS开发工具或Windbg调试工具打开,结合对应的pdb符号文件和源文件,可以定位错误产生的位置等信息。