|
雖然是大公司的產(chǎn)品,QQ它還是會在我們的折騰下崩潰的,但是它總是崩潰的很優(yōu)雅,還要彈出自己的對話框來結(jié)束。并且發(fā)送報告,去掉了系統(tǒng)默認的發(fā)送報告的對話框。 所以一拍腦袋,想讓自己的程序崩潰的體面一點。 自己想了大概的思路,覺得可以用一個進程來監(jiān)控目標程序。的確也可以拿到了目標程序崩潰的信息,知道它什么時候崩潰的,也可以做額外的操作,但是這樣是沒辦法把默認的發(fā)送錯誤的對話框去掉的。 然后又有人說是不是采用了類似鉤子的方法把這個東西在哪里勾掉了。 最后網(wǎng)上查了一番,發(fā)現(xiàn)SetUnhandledExceptionFilter這個函數(shù)解決了一切。 總結(jié)了下搜到的資料,這個函數(shù)的返回值有三種情況:
EXCEPTION_EXECUTE_HANDLER equ 1 表示我已經(jīng)處理了異常,可以優(yōu)雅地結(jié)束了
具體使用方法如下:
#include <windows.h> 成功以后,去翻了下windows核心編程,發(fā)現(xiàn)里面已經(jīng)有提到了這個函數(shù)了。只是由于學(xué)藝不精,暫時沒有去拜讀這么高深的書。所以一直不知道。 問了下同事,發(fā)現(xiàn)他立馬說出了可以用這個函數(shù)(說個大概的函數(shù)名)來實現(xiàn),并且提出在win32下是可以的,但是在MFC可能捕獲不到這個異常。認為MFC下有自己的一套機制來解決。 后來我半信半疑,在MFC下一試,竟然可以o(∩_∩)o... 并且我是在一個MDI程序下的一個DLL中發(fā)生的一個異常,竟然也掉近了回調(diào)函數(shù),心理暗爽啊。 然后又在一個出錯的控件中試了一下,竟然控件的錯誤也能捕獲到。怎一爽字了得! 本文參考了如下兩文章,紅色部分為引用如下文章: http://www./jiamijiemi/xitongdiceng/2007-09-27/a0987174.shtml http://topic.csdn.net/t/20040727/13/3214397.html |
|
|