Ggil의 끄적끄적
분류 전체보기
(230)
잡담
(40)
피식!!
(14)
취미생활
(34)
게임관련
(17)
밥줄팁
(122)
Security
(0)
C
(56)
개발방법론
(2)
빌드툴
(4)
WEB
(4)
Network
(4)
JAVA
(6)
DB
(13)
iPhone&iPad
(2)
ETC
(30)
미국
(3)
홈
태그
미디어로그
위치로그
방명록
이전 네이버 블로그
인간말종31 놀러가기...
뜬구름
쩡경
스타누리
달팽
Mr choi
/
/
블로그 내 검색
SEH
ggil
2010. 12. 24. 11:21
2010. 12. 24. 11:21
SEHSample.zip
출처 : 외계달팽 (원작자 허가받음)
소스소스
void * InstallSEH() { /************************************************************************/ /* Structured Exception Handler 설정. */ /************************************************************************/ return (void *)SetUnhandledExceptionFilter( MyProcessUnhandledException ); } /************************************************************************/ /* 예외 발생 시, 호출되는 핸들러 루틴 */ /************************************************************************/ LONG __stdcall MyProcessUnhandledException(LPEXCEPTION_POINTERS params) { #ifdef _DEBUG MINIDUMP_TYPE dumpType=MiniDumpWithFullMemory; #else MINIDUMP_TYPE dumpType=MiniDumpNormal; #endif /************************************************************************/ /* DbgHelp.dll 로드 */ /************************************************************************/ HMODULE hDll = ::LoadLibrary(_T("DbgHelp.dll")); if(hDll==NULL) { return EXCEPTION_CONTINUE_SEARCH; } /************************************************************************/ /* DbgHelp.dll 에서 MiniDumpWriteDump 함수 포인터 얻기 */ /************************************************************************/ MINIDUMPWRITEDUMP pMiniDumpWriteDump = (MINIDUMPWRITEDUMP) ::GetProcAddress(hDll, "MiniDumpWriteDump"); if( pMiniDumpWriteDump == NULL ) { return EXCEPTION_CONTINUE_SEARCH; } /************************************************************************/ /* 프로세스 핸들, 프로세스 ID, 쓰레드 ID 얻기. */ /************************************************************************/ HANDLE hProcess=GetCurrentProcess(); DWORD processId=GetCurrentProcessId(); DWORD threadId=GetCurrentThreadId(); /************************************************************************/ /* 덤프 파일의 예외 정보 구성 */ /************************************************************************/ MINIDUMP_EXCEPTION_INFORMATION exceptionInfo; exceptionInfo.ThreadId=threadId; exceptionInfo.ExceptionPointers=params; exceptionInfo.ClientPointers=FALSE; /************************************************************************/ /* 덤프 파일 전체 경로 구성 */ /************************************************************************/ TCHAR currentPath[MAX_PATH+1]; ZeroMemory(currentPath, MAX_PATH+1); GetModuleFileName(NULL, ¤tPath[0], MAX_PATH); TCHAR dumpFilePath[MAX_PATH+1]; ZeroMemory(dumpFilePath, MAX_PATH+1); _tcscpy_s(dumpFilePath, MAX_PATH+1, currentPath); _tcscat_s(dumpFilePath, MAX_PATH+1, _T(".dmp")); /************************************************************************/ /* 덤프 파일 생성 전 처리 루틴 */ /************************************************************************/ if( AfxMessageBox( "덤프 파일을 생성할까요?" , MB_YESNO , 0 ) != IDYES ) { return EXCEPTION_CONTINUE_SEARCH; } /************************************************************************/ /* 덤프 파일 열기 */ /************************************************************************/ HANDLE hFile=CreateFile( dumpFilePath , GENERIC_READ|GENERIC_WRITE , FILE_SHARE_READ , NULL , CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL,NULL ); /************************************************************************/ /* MiniDumpWriteDump 함수 호출을 통한 덤프 파일 생성 */ /************************************************************************/ if(pMiniDumpWriteDump != NULL) pMiniDumpWriteDump(hProcess, processId, hFile, dumpType, &exceptionInfo, NULL, NULL); CloseHandle(hFile); /************************************************************************/ /* 덤프 파일 생성 후 처리 루틴 */ /************************************************************************/ CString strPostMsg; strPostMsg.Format("덤프 파일이 생성되었습니다.:[%s]" , dumpFilePath); AfxMessageBox(strPostMsg,MB_OK,0); return EXCEPTION_EXECUTE_HANDLER; }
공유하기
게시글 관리
Ggil의 끄적끄적
저작자표시
비영리
변경금지
+ Recent posts
Powered by
Tistory
, Designed by
wallel
Rss Feed
and
Twitter
,
Facebook
,
Youtube
,
Google+
티스토리툴바