Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
다수의 Thread 가 동작하는 Application 을 Debugging 을 하다 보면 동기화 때문에 문제가 될 경우가 많이 있습니다. 하나의 Process 에서 동기화가 동작하는 것이라면 WinDbg 를 사용해서 하나의 Process 만 살펴 본다면 되겠지만 다수늬 Process 에서 동기화를 처리 한다면 WinDbg 로 하나의 Process 를 멈추어 논다고 해도 다른 Process 는 계속 동작하게 됩니다. 이 경우 Kernel debugger 를 사용해서 User mode 를 Debugging 하는 것이 좋을 수 있습니다.
먼저 Target computer 에 Windbg 가 설치 되어 있어야 하고 Debug mode 로 Boot 되어 있어야 합니다.
다음 command 를 실행 합니다.
ntsd –d –p <PID>
여기서 –d 옵션이 중요한데 Output 과 Prompt 를 Kernel debugger 에서 나타나게 하겠다는 것 입니다. 이 명령을 실행하면 Hot 쪽의 Kernel debugger 에서 Break 가 발생하고 Prompt 가 나타나는 것을 보실 수 있습니다. Kernel debugger 이지만 ntsd 에서 입력한 PID 를 가지는 Process 를 user mode 에서 Debugging 하는 것 입니다.
이 경우 System 전체가 멈추어 있는 상태가 되고 Kernel debugger 에서 .breakin 명령을 사용해서 kernel mode 로 전환이 가능합니다.
Kernel mode 에서 다시 User mode 로 전환 하려면 Kernel debugger 에서 !bpid <pid> 를 해야 합니다. 여기서 주의 할 것은 pid 를 10 진수로 입력할 경우 pid 앞에 0n 을 넣어 주어야 합니다.
마지막으로 !bpid 명령의 경우 kernel mode 에서 Debugging 하다가 user mode 로 전환하고자 할때 유용합니다.
추가) Windbg 를 설치하면 Breakin.exe 라는 utility 가 있는데 이것은 Target 에서 특정 Process 에 대해서 Debug break event 를 발생 시켜서 Kernel debugger 에서 Break 되도록 하는데 사용합니다.
Comments
- Anonymous
January 06, 2009
The comment has been removed