커널 라이브 디버깅을 위한 Remote Live Debugger 설정 하기

이번 Post는 바로 원격에서 커널 디버깅을 할 수 있는 Remote Live Debugger 설정하기 입니다. 지금까지 자료들은 많은(?)데 실질적으로 Setting에 어려움을 격으신 분들이라면 많은 도움이 되실것이라 믿습니다.

Windows Server 2003을 기준으로 작성하였습니다.

[ 용어정리]

Target: 문제가 발생하여 라이브 디버깅이 필요한 컴퓨터를 Target 컴퓨터라 부릅니다.

Host: 원격에서 문제의 컴퓨터를 디버깅 하기 위한 컴퓨터를 Host 컴퓨터라 부릅니다.

Null Modem Cable: Target과 Host 컴퓨터 간의 통신을 위해 매개가 되는 Cable입니다.

WinDbg: Kernel 라이브 디버깅을 하기 위한 소프트웨어 입니다. 최신 버전은https://www.microsoft.com/whdc/devtools/debugging/default.mspx 에서 확인 하십시오.

그림 1 Null Modem Cable

[사전준비사항]

1. Target 컴퓨터에 연결하여 Debug를 하기 위한 별도의 컴퓨터가 준비 되어야 합니다.

2. Null Modem Cable이 준비 되어야 합니다.

3. 두 컴퓨터에 사용할 수 있는 Com 포트가 있어야 합니다.

4. Debug를 실시할 Host 컴퓨터는 WinDbg가 설치 되어야 하며 Symbol 파일이 있어야 합니다. 그렇지 않으면 인터넷에 연결하여 Web Symbol Server와 연결되어야 합니다.

사전 준비 작업

1. Target과 Host 컴퓨터의 장치 관리자에서 사용가능 한 Com Port 번호를 확인 합니다.

그림 2 Com Port 확인

2. Target, Host 컴퓨터의 Com port에 Null Modem Cable를 연결합니다.

[Kernel Live Debuger 설정 방법]

1. Target 컴퓨터에서 아래와 같이 설정 합니다.

a. 아래 명령을 C:\에서 실행합니다.

attrib -s -h -r c:\boot.ini

b. C:\boot.ini에서 아래와 같은 옵션을 추가 합니다.

/debug /debugport=com1 /baudrate=115200

/debugportㅇ에서 옵션에서 사용가능 한 Com Port를 확인하고 설정합니다.

그림 3 Boot.ini 편집

2. Host 컴퓨터에서 아래와 같이 설정합니다.

1. WinDbg(디버깅 도구)를 설치 합니다.

a. https://www.microsoft.com/whdc/devtools/debugging/default.mspx에서 환경에 맞는 WinDbg를 다운로드 하여 설치 합니다.

2. WinDbg에 Symbol 경로를 설정합니다.

a. Windbg를 실행합니다.

b. File > Symbol File Path를 선택합니다.

c. Symbol path에 아래와 같은 Text를 입력하고 OK 버튼을 클릭합니다.

SRV*DownstreamStore*https://msdl.microsoft.com/download/symbols

그림 4 Web Symbol 설정

[ 라이브 디버깅 시작하기]

a. Host 컴퓨터의 WinDbg에서 File > ‘Kernel Debug…’를 클릭합니다

b. ‘Baud rate’ 값에 115200, Port에는 Host 컴퓨터의 Com Port 번호를 설정하고 ‘확인’ 버튼을 클릭합니다.

그림 5 Com Port 설정하기

c. WinDbg 화면에서 ‘Waiting to reconnect...’ 메시지가 나타나면 Target 컴퓨터를 재부팅 합니다.

그림 6 Waiting to reconnect 상태

d. ‘그림 7’과 같은 상태에서 Ctrl + Break 키를 눌러 Control을 Host 컴퓨터로 가져 옵니다.

그림 7 Control을 가져오기 전 상태

그림 8 Control을 가져온 상태

위 상태에서 라이브 디버깅이 가능합니다.

[Target 컴퓨터에서 Memory dump 생성]

0> kd’ 에서 ‘ .crash’를(따옴표 빼고) 입력하면 원격의 Target 컴퓨터에서 블루스크린이 발생하면서 Memory dump를 생성합니다. 생성된 Memory dump는 Target 컴퓨터의 C:\%Systeomroot%\

그림 9 Crash 실행

[Exception 발생시 Action 설정]

라이브 디버깅을 설정하면 일반적인 First Exception에도 사용자의 Action이 필요할 수 있습니다. 이를 막기 위해 아래와 같은 방법으로 Exception 발생시 어떤 Action을 취할 지 설정 할 수 있습니다.

SXD: Exception 발생시 Break into하여 특정 명령을 실행 할 수 있습니다.

e.g)  SXD -c "kb;.time;g" -c2 "kb;.time;g" *

SXN: Exception 발생시 Break into를 하지 않고 메시지 정보 만을 Debuger에 Display합니다.

e.g)  SXn -c "kb;.time;g" -c2 "kb;.time;g" *

그림 10 SX* 설정 방법

[ 관련 문서]

How to Set Up a Remote Debug Session Using a Modem

https://support.microsoft.com/?id=148954