SlideShare a Scribd company logo
1 of 22
Download to read offline
Windows OS 상에서 효율적인 덤프
        생성 및 주의점




        ㈜ 제이씨엔터테인먼트
             Pluto Studio
                 김성준
이 세션의 주제는 간단히…
우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요…



                   으아아아아아아악!!!!!!!!!!!
                   도대체 뭘 해야하는지ㅠ.ㅠ
필요한 것을 생각해 보아요~
 우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요

첫번째로 알고 싶은 것은 “크래쉬 날때”
첫번째로 알고 싶은 것은 “크래쉬 날때” 와
OS 로부터 Event를 받는 방법
                SEH(Structured Exception Handling)



                      API”
두번째로 알고 싶은 것은 “덤프 남기는 방법”

                  MiniDumpWriteDump(…)
SEH(Structured Exception Handling)란…
Windows OS가 제공하는
             Exception Handling Service



         Compiler-Level SEH

         System-Level SEH
         (Raw Operating System SEH)

          Windows O.S
SEH 의 본질은…

“프로그램에서 Exception” 이 발생 했을 때
             OS 로부터 Message를 받는 방법




SetUnhandledExceptionFilter(…) ???

“프로그램에서 Exception” 이 발생 했을 때
    OS가 호출해 주는 Callback Function 등록방법
System–Level-SEH




     Visual Studio 2008에서 테스트 하기 위해서는
Linker 명령줄 추가 옵션란에 아래의 옵션 추가 하세요~
                     /SAFESEH:NO
System–Level-SEH

System-Level-SEH 는 깊게 들어가게
되면 상당히 어려운 Issue인데 이를 더
어렵게 만드는 것은 MS로부터 공개된
문서가 전혀 없다는 거에요…


이는 해킹과 밀접한 관련이 있기 때문
이죠…


그래서 Visual Stuido 6.0에는 없었지
만 2005에서는 SAFESEH라는 개념이
나오기도 했어요…
Compiler-Level SEH
Compiler-Level-SEH란...
    1. Visual Studio Compiler Keyword
       __try, __finally, __except
    2. 이 Keyword를 사용해서 우리들은
       System-Level-SEH 를 사용할 수 있습니다.

그렇다면 C++ 예외 처리(try, catch)와는
                         다른 건가요…?
    Microsoft Visual C++ 컴파일러는 C++ 예외처리를
    Windows SEH(System-Level-SEH)이용하여 구현 즉,
    Visual C++컴파일러는 try, catch 블록을 만나면
    내부적으로 Compiler-Level SEH 구문으로 변경.
Compiler-Level SEH




여기서는 C++ Exception Handling에 대해서는 따로 다루지 않겠습니다.

__try대신에 try , __except대신에 catch 사용한다는 구문 차이가 있지만
내부적으로는 같습니다. C++ Exception Handling은 내부적으로
Compiler-Level-SEH 사용한다는 사실을 기억해주세요...
Compiler-Level SEH
Compiler-Level SEH
Compiler-Level SEH
Compiler-Level SEH
         이 부분 실행 결과는
         어떻게 될까요???
Compiler-Level SEH
 저희들은 Compiler-Level SEH Mechanism을 사용해서 SEH Callback 함
 수를 등록할 수 있습니다.

 바로 __except( filterCallbackFunction(GetExceptionInformation() ) )
 구문이 filterCallbackFunction(…) 함수를 SEH Callback 함수로 등록하는
 부분입니다.



얼핏 보면 FS:[0]에 Exception Handler 함수를 등록하는 System-Level SEH
와 비슷해 보이지만 다릅니다.

Compiler-Level-SEH 에서는 Visual C++ 컴파일러마다 다르지만 컴파일러가
우리 몰래 만든 6.0에서는 __except_handler3함수를 2008에서는
_except_handler4 함수를 FS:[0]에 등록을 하고 이 함수가 호출해 주는
Callback 함수를 __except 구문을 통해서 등록을 합니다.(이후 이 함수를
Callback함수라 하지 않고 Filter Function이라고 칭하겠습니다.)
그러나. 여기서는 더 이상 자세히 다루지는 않겠습니다.
이제 어떻게….

__except(…) 구문을 통해서 Exception Filter 함수를
등록하지 마세요...


그러면 어쩌라고...


현재 실행 중인 Process에서 Exception 발생했을 때 이
Exception을 Handling 하는 어떤 Filter 함수도 없다면 Visual
C++ Compiler가 만들어서 등록한 SEH Callback 함수(Visual
Studio 2008 에서는 __except_handler3)는
SetUnhandledExceptionFilter (…) API를 통해서 등록된
Filter 함수를 호출합니다.
지금까지 한 것은…
 Exception이 발생 했을 때 윈도우 SEH서비스가
 호출 해 주는 Callback 함수를 등록했습니다.
 이것이 다입니다.


그리고 저희들은 Compiler-Level-SEH를 사용해야 하는 데
이 때 Callback되는 Filter 함수를 등록하기 위해서는 __except()
구문을 사용해야 하는 것을 배웠습니다.
그러나 사용하지 말라는 것도... 대신...


Exception이 발생했을 때 호출해 달라는 Filter 함수를
SetUnhandledExceptionFilter (…) API 함수를 통해서 등록해야
한다는 것을... 배웠습니다.
덤프란 무엇이며 필요한 이유는…?
Dump란 :
Exception 발생 시 해당 프로그램의 메모리 내용을
파일로 저장한 파일
(Snapshot of the Application State of the exact moment of Failure).


무엇을 할 수 있을까요...?
Symbol File 즉 Exception이 발생한 실행파일 빌드시 생성된 pdb 파일이 있
다면 Exception 발생 시의 메모리의 값을 Symbol 로 Resolution 해서 볼 수
있습니다.

쉽게 말하면 즉 덤프 파일을 갖고 Exception 상황을 재현해서 디버깅을 할
수 있습니다.
MiniDumpWriteDump

필요한 것들
 1) 헤더 파일 : dbghelp.h
 2) Library 파일 : dbghelp.lib
 3) dll 파일    : dbghelp.dll



구글에서 “Debugging Tools for Windows (x86)” 검색해서
Windbg를 설치하시게 되면 설치된 폴더 안에 있는 SDK 폴더 안에
들어 있어요~~~
(현재 제가 갖고 있는 버전은 6.12.2.633 입니다. )
MiniDumpWriteDump
이 부분에 대해서 말할 게 많은데…

제가 요즘 바빠서 준비를 여기까지 밖에 못했습니다 ㅠㅠ

알고 있는 거랑 발표를 한다는 거랑은 차이가 참 많다는 것을

머리로는 알고 있었지만

막상 발표 준비를 하다 보니 제가 생각한 것 훨씬 더 이상으로

많다는 것을 뼈저리게 느꼈습니다...
한 가지 더~~




    CRT Library
    3rd party components


    구글에서
    "SetUnhandledExceptionFilter" and VC8
    키워드로 검색해보세요~~~
QnA

More Related Content

Viewers also liked

SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기OnGameServer
 
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기OnGameServer
 
Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축OnGameServer
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기OnGameServer
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game serverOnGameServer
 
SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기OnGameServer
 
IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍OnGameServer
 
이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기OnGameServer
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기OnGameServer
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
造訪蓮因寺
造訪蓮因寺造訪蓮因寺
造訪蓮因寺Emma Chang
 
2012過年走春3 3
2012過年走春3 32012過年走春3 3
2012過年走春3 3Emma Chang
 
一起分享吧
一起分享吧一起分享吧
一起分享吧Emma Chang
 

Viewers also liked (20)

SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
 
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
 
Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game server
 
SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기
 
IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍
 
이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
Dream
DreamDream
Dream
 
造訪蓮因寺
造訪蓮因寺造訪蓮因寺
造訪蓮因寺
 
2011moon
2011moon2011moon
2011moon
 
Trimax | reclamefotografen food fotografie
Trimax | reclamefotografen food fotografieTrimax | reclamefotografen food fotografie
Trimax | reclamefotografen food fotografie
 
2012過年走春3 3
2012過年走春3 32012過年走春3 3
2012過年走春3 3
 
2012過年3 3
2012過年3 32012過年3 3
2012過年3 3
 
一起分享吧
一起分享吧一起分享吧
一起分享吧
 
Colormeone
ColormeoneColormeone
Colormeone
 
090719高美
090719高美090719高美
090719高美
 

Similar to Windows os 상에서 효율적인 덤프

GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전주항 박
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅흥배 최
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버Sukjin Yun
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Dong Chan Shin
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁KWANGIL KIM
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
cross compile
cross compilecross compile
cross compilehe4722
 
Giip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanualGiip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanualLowy Shin
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
PHPStorm - tool for php
PHPStorm - tool for phpPHPStorm - tool for php
PHPStorm - tool for phpSungbum Hong
 
Virtualization technology for security
Virtualization technology for securityVirtualization technology for security
Virtualization technology for securityhanbeom Park
 

Similar to Windows os 상에서 효율적인 덤프 (20)

Exception&log
Exception&logException&log
Exception&log
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
Eclipse RCP 1/2
Eclipse RCP 1/2Eclipse RCP 1/2
Eclipse RCP 1/2
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
cross compile
cross compilecross compile
cross compile
 
Giip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanualGiip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanual
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
PHPStorm - tool for php
PHPStorm - tool for phpPHPStorm - tool for php
PHPStorm - tool for php
 
Shellcode
ShellcodeShellcode
Shellcode
 
Virtualization technology for security
Virtualization technology for securityVirtualization technology for security
Virtualization technology for security
 

Windows os 상에서 효율적인 덤프

  • 1. Windows OS 상에서 효율적인 덤프 생성 및 주의점 ㈜ 제이씨엔터테인먼트 Pluto Studio 김성준
  • 2. 이 세션의 주제는 간단히… 우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요… 으아아아아아아악!!!!!!!!!!! 도대체 뭘 해야하는지ㅠ.ㅠ
  • 3. 필요한 것을 생각해 보아요~ 우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요 첫번째로 알고 싶은 것은 “크래쉬 날때” 첫번째로 알고 싶은 것은 “크래쉬 날때” 와 OS 로부터 Event를 받는 방법 SEH(Structured Exception Handling) API” 두번째로 알고 싶은 것은 “덤프 남기는 방법” MiniDumpWriteDump(…)
  • 4. SEH(Structured Exception Handling)란… Windows OS가 제공하는 Exception Handling Service Compiler-Level SEH System-Level SEH (Raw Operating System SEH) Windows O.S
  • 5. SEH 의 본질은… “프로그램에서 Exception” 이 발생 했을 때 OS 로부터 Message를 받는 방법 SetUnhandledExceptionFilter(…) ??? “프로그램에서 Exception” 이 발생 했을 때 OS가 호출해 주는 Callback Function 등록방법
  • 6. System–Level-SEH Visual Studio 2008에서 테스트 하기 위해서는 Linker 명령줄 추가 옵션란에 아래의 옵션 추가 하세요~ /SAFESEH:NO
  • 7. System–Level-SEH System-Level-SEH 는 깊게 들어가게 되면 상당히 어려운 Issue인데 이를 더 어렵게 만드는 것은 MS로부터 공개된 문서가 전혀 없다는 거에요… 이는 해킹과 밀접한 관련이 있기 때문 이죠… 그래서 Visual Stuido 6.0에는 없었지 만 2005에서는 SAFESEH라는 개념이 나오기도 했어요…
  • 8. Compiler-Level SEH Compiler-Level-SEH란... 1. Visual Studio Compiler Keyword __try, __finally, __except 2. 이 Keyword를 사용해서 우리들은 System-Level-SEH 를 사용할 수 있습니다. 그렇다면 C++ 예외 처리(try, catch)와는 다른 건가요…? Microsoft Visual C++ 컴파일러는 C++ 예외처리를 Windows SEH(System-Level-SEH)이용하여 구현 즉, Visual C++컴파일러는 try, catch 블록을 만나면 내부적으로 Compiler-Level SEH 구문으로 변경.
  • 9. Compiler-Level SEH 여기서는 C++ Exception Handling에 대해서는 따로 다루지 않겠습니다. __try대신에 try , __except대신에 catch 사용한다는 구문 차이가 있지만 내부적으로는 같습니다. C++ Exception Handling은 내부적으로 Compiler-Level-SEH 사용한다는 사실을 기억해주세요...
  • 13. Compiler-Level SEH 이 부분 실행 결과는 어떻게 될까요???
  • 14. Compiler-Level SEH 저희들은 Compiler-Level SEH Mechanism을 사용해서 SEH Callback 함 수를 등록할 수 있습니다. 바로 __except( filterCallbackFunction(GetExceptionInformation() ) ) 구문이 filterCallbackFunction(…) 함수를 SEH Callback 함수로 등록하는 부분입니다. 얼핏 보면 FS:[0]에 Exception Handler 함수를 등록하는 System-Level SEH 와 비슷해 보이지만 다릅니다. Compiler-Level-SEH 에서는 Visual C++ 컴파일러마다 다르지만 컴파일러가 우리 몰래 만든 6.0에서는 __except_handler3함수를 2008에서는 _except_handler4 함수를 FS:[0]에 등록을 하고 이 함수가 호출해 주는 Callback 함수를 __except 구문을 통해서 등록을 합니다.(이후 이 함수를 Callback함수라 하지 않고 Filter Function이라고 칭하겠습니다.) 그러나. 여기서는 더 이상 자세히 다루지는 않겠습니다.
  • 15. 이제 어떻게…. __except(…) 구문을 통해서 Exception Filter 함수를 등록하지 마세요... 그러면 어쩌라고... 현재 실행 중인 Process에서 Exception 발생했을 때 이 Exception을 Handling 하는 어떤 Filter 함수도 없다면 Visual C++ Compiler가 만들어서 등록한 SEH Callback 함수(Visual Studio 2008 에서는 __except_handler3)는 SetUnhandledExceptionFilter (…) API를 통해서 등록된 Filter 함수를 호출합니다.
  • 16. 지금까지 한 것은… Exception이 발생 했을 때 윈도우 SEH서비스가 호출 해 주는 Callback 함수를 등록했습니다. 이것이 다입니다. 그리고 저희들은 Compiler-Level-SEH를 사용해야 하는 데 이 때 Callback되는 Filter 함수를 등록하기 위해서는 __except() 구문을 사용해야 하는 것을 배웠습니다. 그러나 사용하지 말라는 것도... 대신... Exception이 발생했을 때 호출해 달라는 Filter 함수를 SetUnhandledExceptionFilter (…) API 함수를 통해서 등록해야 한다는 것을... 배웠습니다.
  • 17. 덤프란 무엇이며 필요한 이유는…? Dump란 : Exception 발생 시 해당 프로그램의 메모리 내용을 파일로 저장한 파일 (Snapshot of the Application State of the exact moment of Failure). 무엇을 할 수 있을까요...? Symbol File 즉 Exception이 발생한 실행파일 빌드시 생성된 pdb 파일이 있 다면 Exception 발생 시의 메모리의 값을 Symbol 로 Resolution 해서 볼 수 있습니다. 쉽게 말하면 즉 덤프 파일을 갖고 Exception 상황을 재현해서 디버깅을 할 수 있습니다.
  • 18. MiniDumpWriteDump 필요한 것들 1) 헤더 파일 : dbghelp.h 2) Library 파일 : dbghelp.lib 3) dll 파일 : dbghelp.dll 구글에서 “Debugging Tools for Windows (x86)” 검색해서 Windbg를 설치하시게 되면 설치된 폴더 안에 있는 SDK 폴더 안에 들어 있어요~~~ (현재 제가 갖고 있는 버전은 6.12.2.633 입니다. )
  • 20. 이 부분에 대해서 말할 게 많은데… 제가 요즘 바빠서 준비를 여기까지 밖에 못했습니다 ㅠㅠ 알고 있는 거랑 발표를 한다는 거랑은 차이가 참 많다는 것을 머리로는 알고 있었지만 막상 발표 준비를 하다 보니 제가 생각한 것 훨씬 더 이상으로 많다는 것을 뼈저리게 느꼈습니다...
  • 21. 한 가지 더~~ CRT Library 3rd party components 구글에서 "SetUnhandledExceptionFilter" and VC8 키워드로 검색해보세요~~~
  • 22. QnA