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

发布于 2024-07-05 11:09:14 字数 138 浏览 7 评论 0原文

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

I am using Visual Studio, developing a native application, I have a programmatical breakpoint (assert) in my code placed using __asm int 3 or __debugbreak. Sometimes when I hit it, I would like to disable it so that successive hits in the same debugging session no longer break into the debugger. How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

日久见人心 2024-07-12 11:09:14

x86 / x64

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

x86: *(char *)eip,x

x64: *(char *)rip,x< /code>

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

PPC

假设您正在编写 PPC 应用程序(例如 Xbox 360),请在监视窗口中写入以下内容:

*(int *)iar,x

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

x86 / x64

Assuming you are writing x86/x64 application, write following in your watch window:

x86: *(char *)eip,x

x64: *(char *)rip,x

You should see a value 0xcc, which is opcode for INT 3. Replace it with 0x90, which is opcode for NOP. You can also use the memory window with eip as an address.

PPC

Assuming you are writing PPC application (e.g. Xbox 360), write following in your watch window:

*(int *)iar,x

You should see a value 0xfeNNNNNN, which is opcode for trap (most often 0x0fe00016 = unconditional trap). Replace it with 0x60000000, which is opcode for NOP.

情深缘浅 2024-07-12 11:09:14

您可以尝试这样的操作:

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

这应该只进行一次调试。 您甚至可以向用户显示一个消息框并询问要做什么:继续(什么也没有发生)、中断(调用 int 3)或忽略(忽略设置为 true,断点不再被命中)

You might try something like this:

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

This should hit the debug only once. You might even show a messagebox to the user and ask what to do: continue (nothing happens), break (int 3 is called) or ignore (ignore is set to true, the breakpoint is never hit again)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文