Microsoft MVP성태의 닷넷 이야기
디버깅 기술: 39. DebugDiag 1.1을 사용한 덤프 분석 [링크 복사], [링크+제목 복사],
조회: 45774
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 6개 있습니다.)
(시리즈 글이 3개 있습니다.)
디버깅 기술: 39. DebugDiag 1.1을 사용한 덤프 분석
; https://www.sysnet.pe.kr/2/0/1026

디버깅 기술: 65. 프로세스 비정상 종료 시 "Debug Diagnostic Tool"를 이용해 덤프를 남기는 방법
; https://www.sysnet.pe.kr/2/0/1786

디버깅 기술: 137. 실제 사례를 통해 Debug Diagnostics 도구가 생성한 닷넷 웹 응용 프로그램의 성능 장애 보고서 설명
; https://www.sysnet.pe.kr/2/0/12067




DebugDiag 1.1을 사용한 덤프 분석

.NET Profiler의 코드를 변경하고, w3wp.exe를 프로파일링하는데 aspx 페이지를 방문하자마자 예외가 발생하면서 프로세스가 죽었습니다. 이벤트 로그에 보니 다음과 같은 오류를 확인할 수 있었는데요.

Log Name:      Application
Source:        Application Error
Date:          4/21/2011 11:53:44 PM
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      MYPC.testad.com
Description:
Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0xc0000005
Fault offset: 0x0000000000000000
Faulting process id: 0x2d4
Faulting application start time: 0x01cc0033e50aebde
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: unknown
Report Id: 26e854a3-6c27-11e0-9940-00155d00c22a

Log Name:      Application
Source:        Windows Error Reporting
Date:          4/21/2011 11:53:47 PM
Event ID:      1001
Task Category: None
Level:         Information
Keywords:      Classic
User:          N/A
Computer:      MYPC.testad.com
Description:
Fault bucket , type 0
Event Name: BEX64
Response: Not available
Cab Id: 0

Problem signature:
P1: w3wp.exe
P2: 7.5.7601.17514
P3: 4ce7afa2
P4: StackHash_57bc
P5: 0.0.0.0
P6: 00000000
P7: 0000000000000000
P8: c0000005
P9: 0000000000000008
P10: 

Attached files:
C:\Windows\Temp\WER9269.tmp.appcompat.txt
C:\Windows\Temp\WER92C8.tmp.WERInternalMetadata.xml
C:\Windows\Temp\WER92E8.tmp.hdmp
C:\Windows\Temp\WER9B08.tmp.mdmp

...[생략]...

Watson Bucket 정보를 분석해 봐도, 모듈명이 "StackHash_57bc"라니... ^^; 뭔가 단단히 잘못된 모양입니다.

P1(AppName): w3wp.exe
P2(AppVer): 7.5.7601.17514
P3(AppStamp): 4ce7afa2
P4(AsmAndModName): StackHash_57bc
P5(AsmVer): 0.0.0.0
P6(ModStamp): 00000000
P7(MethodDef): 0000000000000000
P8(Offset): c0000005
P9(ExceptionType): 0000000000000008
P10: 

프로세스 덤프를 남길까 하다가, 이번에는 이벤트 로그에 기록되어 있던 C:\Windows\Temp\WER9B08.tmp.mdmp를 분석해 보기로 했습니다. (안 해보던 것을 해봐야죠! ^^)

분석도 windbg로 해볼까 하다가, 역시 예전부터 봐두기만 했던 DebugDiag의 자동 분석 도구를 이용하기로 마음먹었습니다.

우선, Debug Diagnostic Tool v2를 설치하고,

Debug Diagnostic Tool v2 Update 3.2
; https://www.microsoft.com/en-us/download/details.aspx?id=103453

"시작" / "Debug Diagnostics Tool 1.1" / "DebugDiag-AnalysisOnly 1.1" 도구를 실행합니다.

분석을 시작하기 전에, 2가지 설정을 해줍니다.

  1. 마이크로소프트 공용 심벌 서버 설정 (여러분들의 제품에 대한 심벌 서버 설정 포함)
  2. DebugDiag-AnalysisOnly 설정

일단 1번은 DebugDiag-AnalysisOnly도구에서도 설정할 수 있지만 _NT_SYMBOL_PATH를 해두는 것이 편리하기 때문에 아예 환경 변수로 설정해 두는 것이 좋습니다.

Microsoft의 PDB 파일 관리
; https://www.sysnet.pe.kr/2/0/321

2번은, DebugDiag-AnalysisOnly 도구의 "Tools" / "Options & Settings" 메뉴를 선택한 후 "Preferences"에서 다음과 같이 "Include source and line information in analysis reports."를 선택해 줍니다.

debug_analysis_w3wp_1.png

이렇게 설정을 마무리 지은 후에 분석 단계로 넘어가면!

방법은 매우 간단합니다. 다음과 같이 "Crash/Hang Analyzers"를 선택하고, "Add Data Files" 버튼으로 덤프 파일을 지정한 후 "Start Anaylsis" 버튼을 선택해 주면 끝입니다.

debug_analysis_w3wp_2.png

아래는 제 경우에 분석된 결과입니다.

debug_analysis_w3wp_3.png

와~~~ PDB 파일의 도움으로 크래쉬가 발생한 소스 코드 라인 번호까지 보여줍니다. (실제로 제 경우에, 저 위치의 분석으로 문제를 해결할 수 있었습니다.)

아쉬운 점이 하나 있다면, 아직 .NET 응용 프로그램에 대한 분석은 지원되지 않는다는 점입니다. 아래의 글에서도 나오지만,

Debugging a .NET crash with rules in Debug Diag
; http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx
; https://www.tessferrandez.com/blog/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.html

.NET 응용 프로그램의 경우에는 대강의 원인 파악만 DebugDiag-AnalysisOnly에서 할 수 있을 뿐, 결국 windbg + sos.dll을 이용하는 것을 볼 수 있습니다.



[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 4/9/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2011-04-25 11시06분
[lancers] 사실 .NET이야 런타임 내부 오류가 아닌 이상은 예외정보가 나오니깐..
DebugDiag가 편리하긴 하더라고요. Crash나 Hang 원인 파악을 하는데는 매우 유용하지요. ^^
(예전 모 사이트에서 이거 덕에 하나 건졌죠..)
[guest]
2011-04-25 04시32분
넵. DebugDiag 결과 보고 쩜 반했습니다. ^^
정성태
2011-04-26 12시41분
[[유수석]] DebugDiag 출력 결과가 WinDbg로 덤프 분석하는 것과 무슨 차이가 있는지 잘 모르겠네요.
WinDbg나 심지어 Visual Studio로도 저 정도의 호출 스택은 보이는데...
궁금해요~ 알려주삼~
[guest]
2011-04-27 10시02분
유수석 님 좋은 지적이십니다. ^^

저도 Visual Studio를 순간적으로 잊은 것 같습니다. VS가 dump 분석을 추가한 이후로 DebugDiag와 스택 덤프에 관해서는 유사한 기능을 가지지 않을까 싶습니다. 대신, windbg 같은 경우에는, 약간의 차이가 있다면 windbg 사용법 및 명령어를 전혀 몰라도 저런 결과를 얻을 수 있다는 점이 틀릴 것 같습니다.

그러고 보니, VS가 정말 좋은 디버거인 것 같습니다. ^^
정성태
2011-04-28 05시40분
참고로, (향후에는 바뀔지 모르지만) 현재 x64/x86 모두 설치하려면, 우선 x64 버전 설치 후 x86을 설치해야 합니다. x86 먼저 설치하면 x64 버전이 설치되지 않습니다.
정성태
2017-07-08 10시37분
정성태
2020-06-08 10시59분
정성태

... 106  107  108  109  110  111  112  113  114  115  116  [117]  118  119  120  ...
NoWriterDateCnt.TitleFile(s)
10999정성태7/16/201622000오류 유형: 341. .NET Framework 4.5.2가 설치 안 되는 경우
10998정성태7/16/201621742.NET Framework: 598. C# - Excel 시트에 윈도우 폼 기능을 추가하는 방법 [1]파일 다운로드1
10997정성태7/16/201621029오류 유형: 340. HTTP Error 500.23 - Internal Server Error파일 다운로드1
10996정성태7/14/201626641Windows: 118. 유선 접속 상태에서 재부팅하면 무선 연결이 자동 연결 안되는 문제 [4]파일 다운로드1
10995정성태6/27/201620774VS.NET IDE: 109. Visual Studio 유료 버전 사용자의 주기적인 온라인 인증을 없애는 방법
10994정성태6/23/201620171개발 환경 구성: 285. 알고스팟(https://algospot.com)을 위한 Visual C++ 답안 작성 요령파일 다운로드1
10993정성태6/23/201620983.NET Framework: 597. 닷넷 메타데이터에 struct/class(값/참조 형식)의 구분이 있을까요?
10992정성태6/13/201618205오류 유형: 339. vbs 스크립트 실행 시 항상 실행 여부를 묻는 질문 창이 뜬다면?
10991정성태6/13/201622477오류 유형: 338. octave-gui 실행 시 "octave-gui.exe has stopped working" 오류
10990정성태6/13/201623980오류 유형: 337. missing type specifier - [type] assumed. Note: C++ does not support default-[type]
10989정성태6/7/201620451.NET Framework: 596. C# - WCF wsDualHttpBinding의 ClientBaseAddress 속성 - 두 번째 이야기
10988정성태6/3/201621425기타: 57. Outlook blocked access to the following potentially unsafe attachments
10987정성태6/2/201622482.NET Framework: 595. XLL 파일에 포함된 .NET 어셈블리를 추출하는 방법
10986정성태6/1/201622904.NET Framework: 594. C# - WCF wsDualHttpBinding의 ClientBaseAddress 속성
10985정성태6/1/201621431오류 유형: 336. An error occurred while ejecting 'DVD RW drive ...'
10984정성태5/31/201627061.NET Framework: 593. C# - wsDualHttpBinding WCF 예제 프로그램파일 다운로드1
10983정성태5/30/201621272VC++: 97. C++ 템플릿 remove_pointer, enable_if, is_pointer 사용 예제파일 다운로드1
10982정성태5/26/201619595오류 유형: 335. SQL Server Management Studio - The database ... is not accessible.
10981정성태5/24/201624575.NET Framework: 592. C# - Lights Out 퍼즐 풀기 [2]파일 다운로드1
10980정성태5/24/201621861VS.NET IDE: 108. Visual Studio 2013/2015를 위한 "Macros for Visual Studio"
10979정성태5/23/201625133.NET Framework: 591. C# - 조합(Combination) 예제 코드 - 두 번째 이야기파일 다운로드1
10978정성태5/23/201623810.NET Framework: 590. C# - 모든 경우의 수를 조합하는 코드 (2)파일 다운로드1
10977정성태5/23/201628265.NET Framework: 589. C# - 모든 경우의 수를 조합하는 코드 (1)파일 다운로드1
10976정성태5/20/201622596Math: 18. C# - 오일러 공식을 이용한 복소수 값의 라디안 회전파일 다운로드1
10975정성태5/20/201623027Math: 17. C# - 복소수 타입의 승수를 지원하는 Power 메서드파일 다운로드1
10974정성태5/20/201623598.NET Framework: 588. C# - OxyPlot 라이브러리로 복소수 표현파일 다운로드1
... 106  107  108  109  110  111  112  113  114  115  116  [117]  118  119  120  ...