如何禁用的程序化断点/断言?(How to disable a programmatical bre

2019-06-26 08:48发布

我使用Visual Studio,开发本地应用程序,我有我的代码的程序化断点(断言)使用__asm INT 3或__debugbreak放置。 有时,当我打它,我想禁用它,这样在相同的调试会话连续击打不再中断调试程序。 我怎样才能做到这一点?

Answer 1:

在x86 / x64

假设你正在写的x86 / x64的应用,下面写在你的观察窗口:

86: *(char *)eip,x

64: *(char *)rip,x

你应该看到一个值的0xCC,这是操作码INT 3.更换的0x90它,这是NOP操作码。 您还可以使用存储器窗口与EIP为一个地址。

PPC

假设你正在编写PPC应用程序(例如Xbox 360的),下面写在你的观察窗口:

*(int *)iar,x

你应该看到一个值0xfeNNNNNN,这是操作码陷阱(最常见的0x0fe00016 =无条件陷阱)。 与0x60000000替换它,这是NOP操作码。



Answer 2:

你可以尝试这样的事:

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

这应该打调试一次。 你甚至可能会显示一个消息框给用户,并要求做什么:继续(没有任何反应),中断(INT 3叫法)或忽视(忽略设置为true,断点不会再命中)



文章来源: How to disable a programmatical breakpoint / assert?