关键是第一个,如何捕获?

SDK的程序在WINMAIN返回之前写段代码,来捕获程序异常退出的原因,并写入TXT文件里,这样的代码该怎么写?

慕森王
浏览 210回答 2
2回答

长风秋雁

程序运行过程中产生的异常一般是由程序自身处理程序自身不处理 且调试器也不处理的操作系统将调用默认的全局异常处理函数来处理异常这个全局函数是可以更改的更改办法是调用函数:SetUnhandledExceptionFilter

幕布斯7119047

这个里面涉及的问题可能比较多? 如果你使用SEH(结构化异常处理)那么你可以捕获绝大多数的异常,但是在结构化异常处理是不能和确定性资源清理一起使用的使用的,简单的说你不能像这样去定义一个对象 A a; 使用关键字 __try __except __finally 你可能需要下面两个函数 GetExceptionCode GetExceptionInformation 这是2个例子 DWORD FilterFunction() { printf("1 "); // printed first return EXCEPTION_EXECUTE_HANDLER; } VOID main(VOID) { __try { __try { RaiseException(1, // exception code 0, // continuable exception 0, NULL); // no arguments } __finally { printf("2 "); // this is printed second } } __except ( FilterFunction() ) { printf("3\n"); // this is printed last } } BOOL SafeDiv(INT32 dividend, INT32 divisor, INT32 *pResult) { __try { *pResult = dividend / divisor; } __except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { return FALSE; } return TRUE; } 最后再提醒你,__try只能和__except或者(注意这里是“或者”)__finally连用,不能__try{...}__except(){...}__finally{...}这样使用
打开App,查看更多内容
随时随地看视频慕课网APP