[프로그래머]야근방지

WinDBG 를 사용해보자..

어리버리_ 2008. 8. 25. 16:59

Devpia VC++ 게시판에 지수경 (cskcsk) 님이 Debugging 팁을 올려주셨다..

그중에 WinDBG 를 사용한 방법을 잊어버리지 않기 위해서 다시 정리해보자..-ㅅ-);;

 

머리가 돌이라....킁..;;

 

 

1. 먼저 zMiniDump.h/cpp 파일을 참조 디렉토리나 프로젝트 파일에 포함하자 (파일로 첨부되어있다)

 

2. WinDBG 를 다운로드 받자

LINK : http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

 

3. Project 설정을 바꿔주자

VS2005 , 2008 경우다

 

프로젝트 -> 속성 -> 구성속성 -> C/C++ -> 코드생성 에서

'C++ 예외처리가능' 이놈이 기본으로 '예(/EHsc)' 로 되어있다 이놈을 -> '예,SEH 예외 있음(/EHa)' 로 변경해주자

 

3, stdafx.h 파일에 zMiniDump.h 파일을 인쿠르드 해주자..

 

#include "../../Common/zMiniDump.h"

 

4. 버튼 하나 맹글어서 맵핑한 다음에 다음과같은 코드를 넣어보자

 

void CXXDlg::OnBnClickedButton1()
{
   ZDUMP_MSGDUMP;

   try
   {
      TCHAR *p = NULL;                     
      _tcscpy(p,_T("abcdefg"));             //Error
    }
    catch (...)
   {
   }
 }

 

당연히 널포인터에 문자열을 복사했으니 에러다..-_-);;

 

5. 빌드는 당연히 되고.....Debug 폴더에서 해당 exe를 실행해보자 버튼까지 클릭하면

 

---------------------------
MiniDump
---------------------------
dows:  5.1.2600, SP 2.0, Product Type 1

Process:  D:\Work\TEST\HelloMFC\release\HelloMFC.exe

Exception Addr:  00401647

Exception Code:  C0000005

Write Address:  00000000

Instruction:  66 89 02 83 C1 02 83 C2 02 66 85 C0 75 EF C7 45

Registers:

EAX: 00000061  EBX: 00000001  ECX: 00439B78  EDX: 00000000

ESI: 00439B70  EDI: 0013FE90  ESP: 0013F7FC  EBP: 0013F81C

EIP: 00401647  EFlags: 00010246

Call Stack:

00401647

00405826

00405A33

0040604E

00409FED

0040A9F9

0040735C

004094CA

00409557

77CF8709

77CF87EB

77CFB368

77CFB3B4

7C93EAE3

77CFB7AB

77186FF6

771870D8

771893DD

77CF8709

77CF87EB
---------------------------
확인  
---------------------------

이런 메시지가 표시된다..그러면서 해당 exe 의 경로에

 

EXE 파일명 + 년월일시분초 .dmp 파일이 생성된다

 

해당 dmp 파일을 WinDBG 로 열어보자

WinDBG 실행후

 

File -> Open Crash Dump 한뒤에 위에서 실행했던 exe 가 있는 폴더로 가서 dmp 파일을 열어놓은뒤

 

아랫쪽 Command Line 에 다음과같이 입력해보자

 

!analyze -v

 

요렇게 입력을 해보면

 

FAULTING_SOURCE_CODE: 
   161:
   162:  try
   163:  {
   164:   TCHAR *p = NULL;
>  165:   _tcscpy(p,_T("abcdefg"));
   166:  }
   167:  catch (...)
   168:  {
   169:   
   170:  }

 

 

친절하게도 이렇게 오류가 있는 코드가 튀어나와주신다..-ㅅ-);;

 

어디서 오류가 나는지 몰라서 밤새도록 디버깅했던 날들이여....

 

이젠 안녕...

 

 

 

 

 

 

 

 

 

할수 있을까..-_-)??

 

 

 

zMiniDump.cpp
0.01MB
zMiniDump.h
0.0MB