数据输入到调试器命中断点前(Data input to debugger before hittin

2019-10-23 19:43发布

我已经运行在目标机器上的应用程序,并试图使用WinDbg的我的电脑进行调试。 现在我想输入一定的参考价值的WinDbg命中条件断点,并应尽快被击中传递作为参数传递给条件断点同前。

我的最终目的是,我不想的WinDbg等待输入超过一秒钟时命中断点。 大家都知道,WinDbg的冻结所有线程时断点命中,所以我得到很多定时器过去发行后继续(使用g )。

我知道,我可以用一个文件(通过将所需数据)和断点被击中立即解析它。 但我希望用户断点命中之前,输入所需的数据(最多5个),并在该数据到应用程序的本地通时条件断点被击中。

我用下面的条件断点bp FileName.cpp:341 "j (1) '.echo \"Breakpoint hit, condition\";ed dwRand 12;gc'; 'gc'"

其实我想获得dwRand断点命中前值,并在遇到断点更新条件断点为ed dwRand <VALUE>

Answer 1:

WinDbg中不冻结自己的线程,它暂停他们,这是有区别的(见.hh freeze详情)。 如果你所有的计时器都在其他线程,可以恢复所有的线程:

0:000> r $t0 = @$tid
0:000> ~*e .if (@$t0 != $tid) {~~[$tid]m} .else { .echo "current thread" }
current thread
0:000> ~
.  0  Id: 1624.f6c Suspend: 1 Teb: 7efdd000 Unfrozen
   1  Id: 1624.180c Suspend: 0 Teb: 7efda000 Unfrozen
   2  Id: 1624.864 Suspend: 0 Teb: 7efd7000 Unfrozen
   3  Id: 1624.1d4c Suspend: 0 Teb: 7efaf000 Unfrozen
   4  Id: 1624.14b0 Suspend: 0 Teb: 7efac000 Unfrozen
   5  Id: 1624.1e54 Suspend: 0 Teb: 7efa9000 Unfrozen
   6  Id: 1624.774 Suspend: 0 Teb: 7efa6000 Unfrozen
   7  Id: 1624.1810 Suspend: 0 Teb: 7efa0000 Unfrozen

与此类似,只有当前线程( 0 )保持暂停( Suspend: 1 ),直到你完成修改内存。 所有其它线程运行( Suspend: 0 )。



Answer 2:

\> ls -l命令

-rw-rw-rw-  1 Admin 0 128 2015-07-13 19:17 hitchange.cpp

:\>猫hitchange.cpp

#include <stdio.h>
#include <stdlib.h>
void main (void) {
  for (int i =0; i< 10; i++){
    printf("%08x\n",rand());
  }
}

:\> .. \的compile.bat

:\>cl /Zi /EHsc /nologo /W4 /analyze *.cpp /link /RELEASE
hitchange.cpp

:\> hitchange.exe

00000029
00004823
000018be
00006784
00004ae1
00003d6c
00002cd6
000072ae
00006952
00005f90

: “bp的hitchange printf的\” \> CDB -c R $ T0 = POI(@ ESP + 8);. printf的\\\“实际兰特VALUë@ [ESP + 8] =%08X \\Ñ\\\ ” @ $ T0; ED @ ESP + 8 F001; GC; \ “;克; q” hitchange.exe

0:000> cdb: Reading initial command 'bp hitchange!printf "r $t0 =poi(@esp+8);.pr
intf \"actual rand value @ [esp+8] = %08x\\n\",@$t0 ;ed @esp+8 f001;gc;";g;q'

actual rand value @ [esp+8] = 00000029
0000f001
actual rand value @ [esp+8] = 00004823
0000f001
actual rand value @ [esp+8] = 000018be
0000f001
actual rand value @ [esp+8] = 00006784
0000f001
actual rand value @ [esp+8] = 00004ae1
0000f001
actual rand value @ [esp+8] = 00003d6c
0000f001
actual rand value @ [esp+8] = 00002cd6
0000f001
actual rand value @ [esp+8] = 000072ae


文章来源: Data input to debugger before hitting the breakpoint