如何禁用编程断点/断言?
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
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.
您可以尝试这样的操作:
这应该只进行一次调试。 您甚至可以向用户显示一个消息框并询问要做什么:继续(什么也没有发生)、中断(调用 int 3)或忽略(忽略设置为 true,断点不再被命中)
You might try something like this:
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)