[WinDbg] 개론

2016. 1. 20. 01:32프로그래밍/ETC

728x90
728x90

WinDbg란

윈도우 디버거. NT 이상의 OS에서 OS와 응용프로그램 디버깅을 모두 지원하는 도구.


주요 기능

- 응용프로그램 디버깅(User Mode Debugging)

- 커널 모드 드라이버 디버깅(Kernel Mode Debugging)

- 크래시 덤프 파일 분석

- 윈도우 시스템 분석

- 스크립트와 확장 DLL

- 디버깅 도움말


커널 모드 드라이버 디버깅, 크래시 덤프 파일 분석 WinDbg만의 특징.


덤프 파일 : 윈도우가 응용프로그램이나 OS에서 문제를 발견했을 때 자동으로 생성하는 파일.


WinDbg 종류

유저모드 디버깅

유저모드 - 일반적으로 응용프로그램이 동작하는 환경을 의미한다.

응용프로그램은 이런 환경에서 각 프로세스로 실행되며 별도 2G의 메모리 공간을 가지고 있다.(32비트 기준)

0 ~ 0x7FFFFFFF 가상 메모리에 붙어 해당 프로세스를 디버깅 하는 것. 


커널모드 디버깅

커널모드 - 운영체제와 커널모드 드라이버들이 동작하는 환경을 의미한다.

0x80000000 ~ 0xFFFFFFFF의 2G 메모리 공간을 사용한다.

유저모드와 달리 가상 메모리 공간에 운영체제와 드라이버들이 공존한다.

서로의 메모리를 침범할 위험이 있다. -> 블루스크린.


라이브 디버깅

유저모드 라이브 디버깅 - 실행 중인 어떤 프로세스를 디버깅.

커널모드 라이브 디버깅 - 두 개 PC로 호스트 PC를 WinDbg를 실행하고 타겟 PC에 테스트할 드라이버를 동작시켜 디버깅하는 방법.


덤프 디버깅

유저모드, 커널모드에서 오류가 발생했을 때 메모리 덤프 파일을 분석하여 디버깅하는 것이다.

메모리 덤프 파일 - 오류가 발생한 시점의 레지스터, 콜 스택, 메모리, 프로세스, 스레드 정보 등이 저장되어 마지막 순간을 보존하는 역할.


유저 덤프

프로세스의 메모리 영역을 파이롤 만들어 준다. 미니 덤프와 전체 덤프 두 종류가 있다.

미니 덤프 - 64KB의 크기로 레지스터, 콜 스택, 프로세스 정보, 스레드 정보, 오류 발생한 시점에 접그했던 메모리 일부만 저장한다.

전체 덤프 - 오류가 발생한 시점에 그 프로세스가 사용하고 있던 메모리를 모두 파일로 저장한다.


커널 덤프

미니 덤프 - 위와 같다.

커널 메모리 덤프 - 커널 메모리에 해당하는 영역만 저장한다. 운영체제와 드라이버는 확인할 수 있지만 유저모드의 프로세스는 알 수 없다.

전체 덤프 - 유저모드, 커널 모드 메모리 모두를 고스란히 저장한다.


디버그 심볼 파일

디버그 심볼 파일 - 실행 파일을 빌드할 때 생성되는 디버그용 정보 파일.


심볼을 로드하는 것이 기본 중의 기본.

가장 괜찮은 방법은 웹 심볼을 사용하는 것이다. 

MS에서 해당 디버깅에 필요한 심볼만 받아서 디버깅 할 수 있다.

이것처럼 개발자도 개발하는 제품의 심볼 파일을 가지고 있어야한다.





728x90
반응형