WinDBG 로 디버깅하는 방법
WinDBG는 Microsoft에서 만든 디버깅 툴입니다.
Visual Studio로 디버깅이 가능하지만 타겟 머신에 일일이 Visual Studio를 설치 할 수는 없기 때문에 WinDBG같은 디버깅툴로 쉽게 디버깅을 하여 응용프로그램의 에러 원인을 쉽게 찾을 수 있습니다.
1. WinDBG 설치.
Platform SDK를 설치하면 기본적으로 WinDBG가 설치됩니다.
가끔 최신 버전으로 업데이트 되므로 최신판으로 설치 합니다.
아래 페이지에서 다운로드하여 설치 합니다.
WinDBG Download :
2. Symbol 패키지 설치.
심볼파일은 디버깅 정보가 들어있는 파일입니다.
우리가 프로그램을 만들면 디버깅 정보가 들어있는 PDB파일이 만들어져서 Visual Studio로 디버깅 할 수 있듯이, 윈도우가 사용하는 시스템 라이브러리에 대한 심볼 파일이 필요합니다.
아래 사이트에서 다운로드하여 설치 합니다.
Symbol File Download :
3. WinDBG설정.
WinDBG와 심볼 파일을 설치하면 WinDBG를 사용자 입맛에 맛게 설정합니다.
레지스트리편집기를 실행하여HKLM\Software\Microsoft\Windows\
CurrentVersion\App Path\ 에서 WinDBG 키값을 입력합니다.
기본값에 windbg가 설치된 경로를 입력합니다.
이렇게 하면 실행에서 WinDBG를 입력하면 WinDBG가 실행이 됩니다.
(**참고 사이트 :http://blog.naver.com/drvoss/20045074350)
다음은 Symbol 파일 경로와 심볼서버를 환경변수에 추가 합니다.
제어판>>시스템>>고급>>환경변수 에서 “_NT_SYMBOL_PATH”이름을 추가하여 값에 아래의 값을 넣어줍니다.
“srv*c:\Symbols*http://msdl.microsoft.com/download/symbols”
다음은 WinDBG를 기본 디버거로 설정합니다.
실행에서 “WinDBG –I”를 입력하면 winDBG가 기본 디버거로 설정이 됩니다.
4. 디버깅 시작.
이제 Access Violation을 일으키는 프로그램을 만들어서 WinDBG로 디버깅 하는 방법을 보여 드리겠습니다.
MFC SDI Application 을 만들어서
CWinDBGTestApp::InitInstance() 함수에서 다음의 코드를 넣어Access Violation을 발생 시킵니다.
TCHAR p[5] = {0,};
TCHAR* txt = _T("Memory Overrun");
CopyMemory(p,txt, _tcslen(txt)*sizeof(TCHAR)); //사실여기서 발생되어야 하는
//데 VS6에서 그냥 넘어가는군요! 그래서 아래의 엉뚱한 포인터를delete 했습니다.
delete txt;
|
프로그램을 실행하면 아래와 같이 Access Violation 메시지 박스가 나타납니다.
여기서 다시 시도를 클릭하면 WinDBG가 실행이 됩니다.
그림과 같이 로드된 모듈과 프로그램 레지스터 상태값들이 출력됩니다.
여기서 아래 그림과 같이 심볼 path를 재설정합니다.(안해도 되지만 정확한 결과를 보기위해서..)
.sympath cache… 에서 cache로 설정을 하면 새로운 심볼 파일이 업데이트 되었을 때 디버거의 반응시간을 빠르게 합니다.
설정을 하고 .reload 명령으로 리로드 시킵니다.
WinDBGTest.cpp의 97번째 라인에서 뭐가 잘못 됐다는 것을 알 수 있습니다.
TCHAR p[5] = {0,};
TCHAR* txt = _T("Memory Overrun");
CopyMemory(p,txt, _tcslen(txt)*sizeof(TCHAR)) <<-이 코드도 잘못된 코드..
delete txt; //97번째 라인
|
테스트는 Visual Studio 6에서 했을 때 “delete txt”부분에서 오류를 내고, Visual Studio 2005에서는 CopyMemory(…)부분에서 오류를 발생 시킵니다.
WinDBG에 관한 더 자세한 명령어나 사용법은 MSDN이나 WinDBG설치 폴더에서 설명서
("% WinDBG 설치 폴더%\debugger.chm”)를 참조하세요.
**참고 자료
http://blog.naver.com/drvoss/20045074350
WinDBG설명서.
WinDBG설명서.
Debugging Applications for Microsoft .NET and Microsoft Windows
-MS Press-
Advanced Windows Debugging
-Addison Wesley-
댓글 없음:
댓글 쓰기