为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2023-01-11 19:15:06

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

查看完整描述

2 回答

?
长风秋雁

TA贡献1546条经验 获得超7个赞

程序运行过程中产生的异常一般是由程序自身处理

程序自身不处理 且调试器也不处理的

操作系统将调用默认的全局异常处理函数来处理异常

这个全局函数是可以更改的

更改办法是调用函数:SetUnhandledExceptionFilter



查看完整回答
反对 回复 2023-01-15
?
幕布斯7119047

TA贡献1526条经验 获得超8个赞

这个里面涉及的问题可能比较多? 
如果你使用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{...}这样使用


查看完整回答
反对 回复 2023-01-15
  • 2 回答
  • 0 关注
  • 6 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信