条件断点在windbg中不起作用 我有以下C++代码< /P> int myvar=1; void test1( int j) { int b=j+1; } void main() { myvar=2; test1(50); myvar=3; test1(100); myvar=6; test1(200); }

条件断点在windbg中不起作用 我有以下C++代码< /P> int myvar=1; void test1( int j) { int b=j+1; } void main() { myvar=2; test1(50); myvar=3; test1(100); myvar=6; test1(200); },windbg,breakpoints,Windbg,Breakpoints,我试图设置一个断点,当运行函数test1时,如果myvar大于4,则该断点将停止 这是我的断点: bp test!test1 ".if ( poi(myvar)>0n4) {} .else {gc} " 但是,每次执行test1时,它都会停止。。。 可执行文件名为test.exe,是一个64位应用程序。 如果您有任何建议,我们将不胜感激。在断点中进行一点调试,可以了解发生了什么: 0 e Disable Clear 00007ff6`77e11410 [f:\projects\wi

我试图设置一个断点,当运行函数test1时,如果myvar大于4,则该断点将停止

这是我的断点:

bp test!test1 ".if ( poi(myvar)>0n4) {} .else {gc} "
但是,每次执行test1时,它都会停止。。。 可执行文件名为test.exe,是一个64位应用程序。
如果您有任何建议,我们将不胜感激。

在断点中进行一点调试,可以了解发生了什么:

 0 e Disable Clear  00007ff6`77e11410  [f:\projects\windbg_help\main.cpp @ 4]     0001 (0001)  0:**** windbg_help!test1 "?? myvar; r $t1=myvar; ?? @$t1; r $t2=poi(myvar); ?? @$t2;  .if (dwo(myvar) > 0n4) {.echo yes; gc} .else {.echo no; gc} "
我将t1临时寄存器设置为myvar,将t2临时寄存器设置为myvar的内容,然后显示它们:

0:000> g
int 0n2
unsigned int64 0x00007ff6`77e1c000
unsigned int64 0xffffffff`00000002
no
int 0n3
unsigned int64 0x00007ff6`77e1c000
unsigned int64 0xffffffff`00000003
no
int 0n6
unsigned int64 0x00007ff6`77e1c000
unsigned int64 0xffffffff`00000006
yes
ModLoad: 00007ff9`c8520000 00007ff9`c8531000   C:\WINDOWS\System32\kernel.appcore.dll
ModLoad: 00007ff9`c9da0000 00007ff9`c9e3e000   C:\WINDOWS\System32\msvcrt.dll
ModLoad: 00007ff9`c9aa0000 00007ff9`c9bc2000   C:\WINDOWS\System32\RPCRT4.dll
ntdll!NtTerminateProcess+0x14:
00007ff9`cc5cfcd4 c3              ret
注意poi(myvar)是如何返回64位值的,并且设置了高32位。您的poi(myvar)>0n4比较是指:

if (0xffffffff0000000? > 4) then { always true }

改用dwo(myvar)只读取32位内容

。dwo为我工作。但是,你有关于dwo的文档吗,我在网上找不到任何东西……dwo是64位poi的替代品吗?在windbg帮助中搜索“MASM编号和运算符”,你会看到一个可能的选项表,包括dwo(指定地址的双字)、qwo(指定地址的四字),Ecc++ C++表达式求值器MyVar是一个C++表达式,不是MASM表达式BP CONDBP!测试1“。如果(@@(myvar)