Application이 불현듯 죽을 때 Debug Diagnostic Tool 이용하기
페이지 정보
작성자 서방님 댓글 0건 조회 152회 작성일 10-06-16 15:29본문
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을 실행할 수 있습니다. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
먼저, 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 할 수 있습니다.
댓글목록
등록된 댓글이 없습니다.