Application이 불현듯 죽을 때 Debug Diagnostic Tool 이용하기 Windows debugging

Application을 개발하다 보면, Test환경에서 아무 문제없이 수행되어 Working Machine Deploy 하고 서비스를 시작하는 데, 며칠 지나고 났을 때, 이상한 Dialog창이 Open되면서 unexpected termination 이라는 용어가 뜨면서 죽어버리는 현상을 만날 때가 있습니다. 이 경우, Debugger를 걸고, 수행해보면, 아무 문제가 없지만, 한 며칠 수행하다 보면 간혹 이런 오류가 발생하면서 어디서 죽었는지도 알지 못한 체 재 시작을 하는 경우가 있는 데, 이와 같은 경우, Application Terminated 되는 순간에 어느 함수가 호출됐는지 알 수 있다면그 당시 parameters나 변수정보를 알 수 있다면 Debugging이 보다 쉬워질 수 있습니다.

Microsoft
에서 제공하는 Debug Diagnostic Tool Application terminated 되거나 Access Violation 오류가 발생하는 경우에, 자료를 수집하여 결과를 reporting 해주는 유용한 Tool입니다. http://www.microsoft.com/downloads/details.aspx?familyid=9BFA49BC-376B-4A54-95AA-73C9156706E7&displaylang=en 에서 IIS Diagnostic toolkit install 하고 나면, Debug Diagnostic tool을 실행할 수 있습니다.

 

먼저, Unexpected 하게 Application termination이 된다면, 해당 문제가 발생하는 Application이 수행하는 환경에 Debug Diagnostic Tool Install 하고, 해당 Application이 수행될 때, 다음과 같이 설정합니다.
 

1)     Debug Diagnostic Tool 실행합니다.

2)     Add rule Click 하여 rule 을 설정합니다.

3)     “Crash를 선택하고 적절한 process type을 선택한 후, process list에서 해당 Application을 선택합니다.

4)     Configuration에서Advanced settings가 있는 데, Application termination되는 현상이기 때문에 Windows 에서 Application terminated 될 때 호출하게 되는 function kernel32!ExitProcess breakpoint를 설정할 수 있도록 도와줍니다. “Advanced settings”안의breakpoints click 하고 add 하여, kernel32!ExitProcess 를 선택하고, Action type “Full User dump”로 설정합니다. (여기서 dump는 일종의 memory snapshot binary file .dmp 파일입니다. Debug Diagnostic Tool은 해당 binary file로부터 reporting을 해주는 기능을 제공합니다. 추후에 언급합니다.)

5)     해당 Rule을 저장한 후에 “Rule completed”에서 해당 Rule activated 하면, 해당 Application을 모니터링 하다가 Application terminated 되거나 Crash로 인한 2nd chance Exception이 발생하면, .dmp file을 생성합니다.

 

해당 Menu에서 눈치챘겠지만, “Advanced settings”에서, “breakpoints” 에서는 break을 원하는 지점의 function을 설정할 수 있습니다. 또한, 잘못된 메모리 참조(Access Violation)와 같은 문제로 인하여 Application crash가 발생한다면,

1)     “Advanced settings에서exceptions를 선택하고,

2)     Add exceptions 하여, AV에 해당하는 Exception code (c0000005)를 선택한 후 Full user dump를 수집하도록 설정한다면,


AV
가 발생한 시점에 메모리 snapshot 를 생성할 수 있습니다.

 

 


Debug Diagnostic Tool은 생성된 Memory snapshot(.dmp file)으로 부터 Crash가 발생한 callstack정보(문제가 발생한 시점의 함수 history)를 출력해 줍니다.

1)     메모리 Dump가 수집된 이후에, Debug Diagnostics Tool을 실행하고,

2)     Main 창에서advanced analysis” Tab을 선택

3)     Crash/Hang analyzer 를 선택하고, add data files Click 하여 수집된 .dmp 파일의 위치를 설정한 후에,

4)     Tools menu, “Options and settings” 안에 보면, symbol path를 설정하는 부분이 존재하는 데, 해당 Application Symbol file (.pdb 파일, Application debugged mode compile을 하면, .exe 와 더불어 .pdb 파일이 생성됨, 해당 파일은 Application symbol table정보 및 source line 정보를 제공해 줌) symbol path에 추가해야 합니다.

5)     그리고, “start analysis Click 하면, .mht file 형태로 report 를 제공합니다.

해당 report에는 문제가 발생한 시점의 Function source code line정보 (Symbol이 정확하다는가정하에)를 출력해 줍니다. 이를 기반으로 Application Debugging 할 수 있습니다.

 

 


핑백

  • 기억속으로 날다(Walking on Memory) : (간단하게) Managed Application의 Crash dump 확인하기 2008-05-27 14:35:11 #

    ... ugging 할 때, Live로 하기 어려운 경우, AD+나 DebugDiag Tool을 이용하여 Crash Dump(http://byung.egloos.com/3831955 참조)를 간혹 수집하곤 한다. 그리고, 수집된 memory dump를 가지고 문제가 발생한 위치를 추적하는 작 ... more

  • 찡구토리 : Leak!!!! 2010-12-20 15:45:25 #

    ... Debug Diagnostic Toolhttp://byung.egloos.com/3831955leakdiag125http://process3.blog.me/20053674503LDGrapherleakdiag로 나온 XML Log파일을 그래프로 분 ... more

  • 상연 : Debugging 2012-03-30 14:02:13 #

    ... http://byung.egloos.com/3831955</a><a title="Application이 불현듯 죽을 때 Debug Diagnostic Tool 이용하기" href="http://byung.egloos.com/3831955" name="3831955">Application이 불현듯 죽을 때 Debug Diagnostic Tool 이용하기</a> Windows debugging by SehYoon 2007/10/06 21:04 <a href ... more

덧글

댓글 입력 영역