我正在使用Visual Studio,开发本机应用程序,我在使用__asm int 3或__debugbreak放置的代码中有一个程序断点(断言)。有时当我点击它时,我想禁用它,以便在同一个调试会话中的连续命中不再进入调试器。我怎么能这样做?
答案 0 :(得分:31)
假设您正在编写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的操作码。
答案 1 :(得分:4)
您可以尝试这样的事情:
#define ASSERT(x) {\
if (!(x)) \
{ \
static bool ignore = false; \
if (!ignore) \
{ \
ignore = true; \
__asm int 3 \
} \
}\
}
这应该只调试一次。您甚至可能向用户显示一个消息框并询问该怎么做:继续(没有任何反应),break(调用int 3)或忽略(ignore设置为true,断点永远不会再次被击中)