C++
minidump
xaida
2018. 2. 26. 09:19
- typedef struct _MinidumpInfo
- {
- DWORD threadId; ///< crash가 발생한 threadId
- EXCEPTION_POINTERS* pException; ///< 예외 포인터
- } MinidumpInfo, *PMinidumpInfo;
- int ExceptionHandler(EXCEPTION_POINTERS* pException)
- {
- if (pException->ExceptionRecord->ExceptionCode == EXCEPTION_STACK_OVERFLOW)
- {
- MinidumpInfo info;
- info.threadId = ::GetCurrentThreadId();
- info.pException = pException;
- // 덤프 찍기용 쓰레드 하나 생성해 주고
- HANDLE hThread = (HANDLE)_beginthreadex(0, THEAD_STACK_SIZE(대략 2메가), CreateMiniDump, &info, 0, NULL);
- // 생성 쓰레드가 덤프 끝날 때까지 기다린다
- WaitForSingleObject(hThread, INFINITE);
- CloseHandle(hThread);
- }
- else
- {
- /// 스택 오버플로우가 없는 일반적인 경우의 덤프 처리
- }
- return EXCEPTION_EXECUTE_HANDLER;
dbghelp.dll 의 MiniDumpWriteDump 함수를 이용해서 Dump파일을 생성하고 있다.
도움 될만한 멋진 코드다. 다운받자. (너무 코드량이 많긴하다.ㅋ) 덤프와 더불어
덤프 파일을 관리하는 코드까지 포함되어 있다.
GUI hung 발생을 감지하는 코드와 뭔가 고급스럽고, 내부를 잘 아시는듯한 분이 짜신 코드다.
결과적으로 모두 같은 코드에 가깝다. ^^ 이 분들중 하나만 분석해도 충분하다. 개인적으로
http://greenfishblog.tistory.com/19 이 분의 코드를 분석정리하는 것을 권한다. ^^
그런데 스택오버플로가 발생하면 dump가 남지 않는다. 어떻게해야하나~