WinDbg에 관한 글 입니다.
아직도 갈길을 정하지 못하고 헤메고 있습니다.
이것도 좋아 보이고 저것도 좋아 보이고,,,
조건 브레이크 포인트를 사용하면 디버깅에 도움이 되는 경우가 상당히 많습니다.
하지만 조건문을 어떻게 적어줘야 하는지 잘 몰라서
적극적인 활용을 하지 못하고 있습니다. ^^
이번에 익힌 사용방법을 적어놓고 갈무리하려 합니다. ㅋㅋㅋ
kd> bp b8fb429d “.if @@(pData->dwMyFlag & 0x00010000) {}
.else {gc}”
b8fb429d 주소에 브레이크 포인트를 거는데 조건에 따라 걸리게 하고 싶은 상황입니다.
.if {} .else {} 명령을 사용한 조건문입니다.
@@( ) 을 사용하면 괄호 안에서는 C/C++ 소스코드에서 사용하던 표현들을 쓸 수 있습니다.
심볼이
맞아 있으면 위와 같이 소스에서 사용하던 구문 그대로 표현할 수 있습니다.
pData->dwMyFlag
에서 0x00010000 비트가 켜져 있으면 브레이크 하라는 의미입니다.
비트가 켜져 있지 않으면 .else 에 의해서 gc 로 계속
진행합니다.
PS)
조건 브레이크 포인트를 사용할 때 조건이 맞지 않아서 계속 진행하게 할 때는 반드시 gc
(Go from Conditional Breakpoint)를 사용해야 합니다. 한 줄씩 step trace 를 하다가 조건 브레이크 포인트를
만났을 경우 gc 를 해야만 다음 라인으로 step trace 가 되기 때문입니다.
.else {g} 와 같이 쓴다면 조건이 맞지 않을
경우 g 를 실행하여 확~~~ 실행되어 버립니다. 한 줄씩 디버깅하면서 step trace 하고 있는 경우에 F10 을 눌렀는데 다음 라인에서
서지 않고 그냥 실행되어 버릴 수 있다는 뜻입니다. 당황스럽겠죠?
–from http://www.ezdoum.com/stories.php?story=04/12/21/0280585
–from http://dasomns.com/~leedw/mywiki/moin.cgi/WinDbg
예전에 WinDbg를 설치해서 잠깐 사용해보다가 “뭐 이런
디버거가 다 있어”라고 하고는 그냥 내팽게쳐 버리고 잊고 있었던 디버깅 툴이었다. 그런데 요즘 여기에 올린 어떤 강좌때문에 다시 이 디버거를
사용하게 되었는데 그때는 발견하지 못했던 색다른 기능들을 접할 수 있었다. 한번쯤 배워 볼만한 가치가 있는 디버거라는 생각이 든다.
download : http://www.microsoft.com/whdc/ddk/debugging/default.mspx
see also
WinDbg Tutorial by Saikat Sen
A Word for WinDbg by Mike Taulty
Using the Windbg Debugging Tool
by Geoff Gray
VMWARE를 통한 커널 디버그 설정방법
- http://www.debuglab.com
Debug Tutorial Part 1: Beginning Debugging Using
CDB and NTSD by Toby Opferman
Debug Tutorial Part 2: The Stack
Debug Tutorial Part 3: The Heap
Debug Tutorial Part 4: Writing WINDBG
Extensions
Debug Tutorial Part 5: Handle
Leaks
Debug Tutorial Part 6: Navigating The
Kernel
Debug Tutorial Part 7: Locks and Synchronization
Objects