MFC程序顯示控制檯,崩潰轉儲代碼

///////////////////////////////////////////////////////////////////////////////

#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include  <dbghelp.h> 
#pragma comment(lib,  "dbghelp.lib")
//顯示控制檯
void InitConsoleWindow()
{
int nCrt = 0;
FILE* fp;
AllocConsole();
nCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
fp = _fdopen(nCrt, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}



SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);

//異常處理代碼

//EXCEPTION_EXECUTE_HANDLER equ 1 表示我已經處理了異常,可以優雅地結束了 
//EXCEPTION_CONTINUE_SEARCH equ 0 表示我不處理,其他人來吧,於是windows調用默認的處理程序顯示一個錯誤框,並結束 
//EXCEPTION_CONTINUE_EXECUTION equ -1 表示錯誤已經被修復,請從異常發生處繼續執行 
LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
CString   strDumpFile; 
strDumpFile.Format("./%d",CTime::GetCurrentTime().GetTickCount());
strDumpFile   +=  ".dmp "; 
HANDLE   hFile   =   CreateFile(strDumpFile,   GENERIC_WRITE,   FILE_SHARE_WRITE,   NULL,   CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,   NULL   );


if   (hFile!=INVALID_HANDLE_VALUE)

MINIDUMP_EXCEPTION_INFORMATION   ExInfo; 


ExInfo.ThreadId   =   ::GetCurrentThreadId();
ExInfo.ExceptionPointers   =   ExceptionInfo;
ExInfo.ClientPointers   =   NULL;


//   write   the   dump
BOOL   bOK   =   MiniDumpWriteDump(GetCurrentProcess(),   GetCurrentProcessId(),   hFile,   MiniDumpNormal,  &ExInfo,   NULL,   NULL   );
CloseHandle(hFile); 



//theApp.PostThreadMessage(WM_QUIT,0,0);
return EXCEPTION_EXECUTE_HANDLER;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章