今天插个题外话,怎样加快程序调试,在程序非法异常的时候,记录异常代码的位置。
程序免不了bug,尤其在多
线程的程序中,有时候程序异常退出很不易重现,为了重现bug,夜以继日的测试,下面介绍一个简单的方法,捕获未处理异常,然后视软件设计者意图,自动重启,或者等待处理,或者其它都自便。
异常发生时,同时保存两个log文件,一个为text格式,指出
错误发生所在代码行,一个为dump调试
文件,MiniDump格式,可以用Visual studio打开重现当时的堆栈状况。
原理:调用函数SetUnhandledExceptionFilter,设置未捕获异常的回调函数;
调用函数MiniDumpWriteDump,生成可调试二进制文件;
调用函数GetLogicalAddress等,生成text文件,记录当时堆栈情况。
下图为写0异常被捕获的情形:清楚的指出,异常代码所在位置:exceptiontest.cpp的第16行:
window.open('http://www.qtcn.org/bbs/attachment/Mon_1112/17_534_069661f9ed8edef.png?20');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" > 一个例子,和更详细的描述,见另一个帖子:
http://www.qtcn.org/bbs/read-htm-tid-47201-displayMode-1.html