Microsoft MVP성태의 닷넷 이야기
디버깅 기술: 39. DebugDiag 1.1을 사용한 덤프 분석 [링크 복사], [링크+제목 복사],
조회: 45647
글쓴 사람
정성태 (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분
정성태

... [166]  167  168  169  170  171  172  173  174  175  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
887정성태6/23/201034143개발 환경 구성: 79. Hyper-V의 가상 머신에서 소리 재생 방법 [2]
886정성태6/23/201022345제니퍼 .NET: 14. ASMX, WCF 호출 모니터링 및 누수 확인
885정성태6/20/201023904개발 환경 구성: 78. COM+ 서버에서 COM+ 서버를 호출하는 방법
884정성태6/20/201026833제니퍼 .NET: 13. COM+ 서버 모니터링 [2]
883정성태6/18/201028724개발 환경 구성: 77. Appinit_Dlls로 구현한 환경 변수 설정 DLL [5]파일 다운로드1
882정성태6/17/201031546개발 환경 구성: 76. JKS(Java Key Store)에 저장된 인증서를 ActiveX 코드 서명에 사용하는 방법 [1]
881정성태6/14/201021002제니퍼 .NET: 12. COM+ 호출 모니터링 및 누수 확인
879정성태6/10/201023614제니퍼 .NET: 11. 소켓 모니터링 기능으로 본 ASP.NET의 소켓 풀링 기능 [1]
878정성태6/6/201023420제니퍼 .NET: 10. 소켓 모니터링 기능으로 본 WCF의 WSDualHttpBinding 성능 부하
877정성태5/31/201020195제니퍼 .NET: 9. 성능 관리 퀴즈 세 번째 문제 (닷넷 개발자 컨퍼런스)
876정성태5/31/201019608제니퍼 .NET: 8. 성능 관리 퀴즈 두 번째 문제 (닷넷 개발자 컨퍼런스) [2]
875정성태5/30/201021347제니퍼 .NET: 7. 성능 관리 퀴즈 첫 번째 문제 (닷넷 개발자 컨퍼런스)
873정성태5/19/201028225제니퍼 .NET: 6. 제니퍼를 위한 방화벽 설정
872정성태5/15/201027547제니퍼 .NET: 5. 제니퍼 서버 - NT 서비스로 구동시키는 방법
871정성태5/13/201034149VC++: 40. MSBuild를 이용한 VC++ 프로젝트 빌드파일 다운로드1
870정성태5/12/201025128제니퍼 .NET: 4. 닷넷 APM 솔루션 - 제니퍼 닷넷의 기능 요약 [2]
869정성태11/8/201926607오류 유형 : 95. WCF 인증서 설정 관련 오류 정리 [4]
865정성태5/5/201028914개발 환경 구성: 75. 인증서의 개인키를 담은 물리 파일 위치 알아내는 방법파일 다운로드1
864정성태5/4/201032780.NET Framework: 178. WCF - 사용자 정의 인증 구현 예제 [4]파일 다운로드1
863정성태5/4/201058664개발 환경 구성: 74. 인증서 관련(CER, PVK, SPC, PFX) 파일 만드는 방법 [1]파일 다운로드1
862정성태5/3/201020584제니퍼 .NET: 3. 제2회 닷넷 개발자 컨퍼런스에서 뵙겠습니다. ^^
861정성태5/1/201021166.NET Framework: 177. .NET 2.0 Profiler에 .NET 4.0 지원 추가
860정성태4/30/201026187오류 유형: 95. .NET 4.0 설치 오류 - 0x800c0005 [1]
858정성태4/29/201030115제니퍼 .NET: 2. JENNIFER .NET을 이용한 .NET 웹 사이트 모니터링 (2) - 설치 [3]
857정성태4/27/201028186제니퍼 .NET: 1. JENNIFER .NET을 이용한 .NET 웹 사이트 모니터링 (1) - 임시 라이선스 요청 및 다운로드
855정성태4/24/201025149.NET Framework: 176. DataContext가 thread-safe한 것인가?
... [166]  167  168  169  170  171  172  173  174  175  176  177  178  179  180  ...