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

有帮助吗?

解决方案

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的操作码。

其他提示

您可以尝试这样的事情:

#define ASSERT(x) {\
   if (!(x)) \
   { \
      static bool ignore = false; \
      if (!ignore) \
      { \
         ignore = true; \
         __asm int 3 \
      } \
   }\
}

这应该只调试一次。您甚至可能向用户显示一个消息框并询问该怎么做:继续(没有任何反应),break(调用int 3)或忽略(ignore设置为true,断点永远不会再次被击中)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top