다시 매우 늦게 대답 그러나 사람은
lsf
가 SRC 파일
을로드하는 모든 SRC 옵션을 사용하려면 SRC 라인 지원을
l+*
수 있도록
.lines
을 WINDBG에서 소스 레벨 구문을 사용할 수 있습니다 ls from,to
현재 src 파일에서 src 행을 검사합니다.
현재 파일을 보려면
lsc
`module!srcfile:linenum`
어떤 SRC 파일에서 모든 줄을 denaote하는 (여기 src syntax needs to be wrapped in grave accents not single quotes)
는 (이것은 WinDBG에서의 defaukt)
l+*
모든 SRC 줄 옵션을 가능하게하여 CDB에서 .lines turns on src line support
에있다
샘플 연습
jmpouttaloo:\>dir /b
jmpouttaloo.cpp
jmpouttaloo:\>type jmpouttaloo.cpp
#include <stdio.h>
int main (void)
{
int i=0,j=0,k=0,l=0;
while (i++ < 100)
{
while (j++ < 100)
{
while(k++ < 100)
{
l++;
}
l++;
}
l++;
}
printf("%d\n",l);
return 0;
}
jmpouttaloo:\>cl /Zi /nologo jmpouttaloo.cpp
jmpouttaloo.cpp
jmpouttaloo:\>dir /b *.exe
jmpouttaloo.exe
jmpouttaloo:\>jmpouttaloo.exe
300
입니다
lsf
로드 src 파일 jmpouttaloo.루프
지금 우리가 체계적으로 각 루프
나가야 할 때 페이지와 스테핑 CPP
set a bp on main and run
exe를
jmpouttaloo:\>cdb -c ".lines;l+*; lsf jmpouttaloo.cpp; bp jmpouttaloo!main;g" jmpouttaloo.exe
우리가 가장 안쪽의 내부에 착륙 단계 당 하나 개의 SRC 라인
6 단계를 단계 ls start , count
은 시작 번호부터 시작 번호 + 개수의 src 행을 보여줍니다.
특정 src 행이 나타날 때까지 실행
,451,515,
이 g graveaccent 콜론 LINENUMBER의 graveaccent을
전체 SRC 줄 구문은 우리가 (12)가 다시 9 호선에 우리가 종료해야하는 루프 라인에
0:000> cdb: Reading initial command '.lines;l+*; lsf jmpouttaloo.cpp; bp jmpouttaloo!main;g'
Breakpoint 0 hit
> 3: {
0:000> p
> 4: int i=0,j=0,k=0,l=0;
0:000>
> 5: while (i++ < 100)
0:000>
> 7: while (j++ < 100)
0:000>
> 9: while(k++ < 100)
0:000>
> 11: l++;
0:000>
> 12: }
0:000>
> 9: while(k++ < 100)
graveaccent modulename! filename : linenumber graveaccent
첫 번째 실행을 다음과 같이 13 호선에서이 루프를 벗어났다.
0:000> ls 13,6 view src lines from line number 13 to 18 (6 lines)
13: l++;
14: }
15: l++;
16: }
17: printf("%d\n",l);
18: return 0;
0:000> dv view locals we have stepped only once so all locals must be 1
j = 0n1
l = 0n1
k = 0n1
i = 0n1
0:000> g `:13` lets get out of innermost loop and look at the locals
> 13: l++;
0:000> dv
j = 0n1
l = 0n100 <-------
k = 0n101 <-------------
i = 0n1
0:000> g `:15` getting out of second innermost loop and inspect locals
> 15: l++;
0:000> dv
j = 0n101
l = 0n200
k = 0n200
i = 0n1
0:000> g `:17` getting out of all loops and inspect locals
> 17: printf("%d\n",l);
0:000> dv
j = 0n200
l = 0n300
k = 0n200
i = 0n101
0:000> p
300 <--------------- output of printf
> 18: return 0;
0:000>
두 번째 실행
another jig this time we break on line 15 straight without even loading the src
jmpouttaloo:\>cdb -c ".lines;g `jmpouttaloo!jmpouttaloo.cpp:15`;dv;q" jmpouttaloo.exe | grep -A 4 "j ="
j = 0n101
l = 0n200
k = 0n200
i = 0n1
quit:
jmpouttaloo:\>
고마워요! WinDbg을 사용하고 "커서로 실행"버튼 (F7 또는 Ctrl + F10)을 관찰하지 않습니다. – gavenkoa