如何禁用程序断点/断言?

时间:2008-09-22 14:43:26

标签: visual-studio debugging x86 assert debugbreak

我正在使用Visual Studio,开发本机应用程序,我在使用__asm int 3或__debugbreak放置的代码中有一个程序断点(断言)。有时当我点击它时,我想禁用它,以便在同一个调试会话中的连续命中不再进入调试器。我怎么能这样做?

2 个答案:

答案 0 :(得分:31)

x86 / x64

假设您正在编写x86 / x64应用程序,请在监视窗口中写下以下内容:

x86:*(char *)eip,x

x64:*(char *)rip,x

您应该看到一个值0xcc,它是INT 3的操作码。将其替换为0x90,这是NOP的操作码。您也可以使用内存窗口和eip作为地址。

PPC

假设您正在编写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,断点永远不会再次被击中)