Windbg:计算崩溃前断点被击中的次数

Windbg: Figuring out how many times a breakpoint was hit before a crash

我设置了以下断点:

bp MSPTLS!LsCreateLine 100

100次断点前程序崩溃。当我在崩溃后执行 bl 时,我得到以下信息:

0 e 5dca4b62     0072 (0100)  0:**** MSPTLS!LsCreateLine

根据此信息,我假设断点在崩溃前被击中了 72 次。

然而,当我这样做时 bp MSPTLS!LsCreateLine 80 我能够在崩溃前到达断点,告诉我在崩溃前断点被击中了 72 次以上。这个72不是表示打了多少次断点吗?

WinDbg默认的数字格式是十六进制。如果你想要十进制数,请在它们前面加上 0n:

0:005> bp ntdll!DbgBreakPoint 0n100
0:005> bl
 0 e 7735000c     0064 (0064)  0:**** ntdll!DbgBreakPoint

(0064)之前的计数器0064倒数。您可以在任何 GUI 应用程序中轻松观察到这一点:

0:000> bl
 0 e 74fd78d7     000a (000a)  0:**** USER32!NtUserGetMessage+0x15
 1 e 74fd78c2     0064 (0064)  0:**** USER32!NtUserGetMessage
0:000> g
Breakpoint 0 hit
eax=00000001 ebx=00000001 ecx=00000000 edx=00000000 esi=001faf8c edi=74fd787b
eip=74fd78d7 esp=001faf44 ebp=001faf60 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
USER32!NtUserGetMessage+0x15:
74fd78d7 83c404          add     esp,4
0:000> bl
 0 e 74fd78d7     0001 (000a)  0:**** USER32!NtUserGetMessage+0x15
 1 e 74fd78c2     005a (0064)  0:**** USER32!NtUserGetMessage
0:000> ? 5a
Evaluate expression: 90 = 0000005a

在示例中,断点 0 已被击中 10 次,断点 1 留在第 90 次。