我正在使用Visual Studio开发本地应用程序,我的代码中使用__asm int 3或__debugbreak放置了一个编程断点(assert)。有时当我命中它时,我希望将其禁用,以便在同一调试会话期间连续命中不再中断到调试器。我该如何做?
我正在使用Visual Studio开发本地应用程序,我的代码中使用__asm int 3或__debugbreak放置了一个编程断点(assert)。有时当我命中它时,我希望将其禁用,以便在同一调试会话期间连续命中不再中断到调试器。我该如何做?
假设您正在编写x86/x64应用程序,在监视窗口中输入以下内容:
x86:*(char *)eip,x
x64:*(char *)rip,x
您应该会看到一个值为0xcc,这是INT 3的操作码。将其替换为0x90,这是NOP的操作码。您还可以使用以 eip 为地址的内存窗口。
假设您正在编写PPC应用程序(例如Xbox 360),在监视窗口中输入以下内容:
*(int *)iar,x
您应该会看到一个值为0xfeNNNNNN,这是陷阱的操作码(通常为0x0fe00016 =无条件陷阱)。将其替换为0x60000000,这是NOP的操作码。
#define ASSERT(x) {\
if (!(x)) \
{ \
static bool ignore = false; \
if (!ignore) \
{ \
ignore = true; \
__asm int 3 \
} \
}\
}
这应该只会在调试时触发一次。甚至可以向用户显示一个消息框并询问要做什么:继续(什么也不发生),断点(int 3被调用)或忽略(ignore设置为true,断点不再被触发)