我正在使用 Visual Studio 开发本机应用程序,我在使用 __asm int 3 或 __debugbreak 放置的代码中有一个程序断点(断言)。有时当我点击它时,我想禁用它,以便同一调试会话中的连续点击不再闯入调试器。我怎样才能做到这一点?
Suma
问问题
8684 次
2 回答
33
x86 / x64
假设您正在编写 x86/x64 应用程序,请在监视窗口中编写以下内容:
x86:*(char *)eip,x
x64:*(char *)rip,x
您应该看到一个值 0xcc,它是 INT 3 的操作码。将其替换为 0x90,它是 NOP 的操作码。您还可以使用带有 eip 作为地址的内存窗口。
每次点击付费
假设您正在编写 PPC 应用程序(例如 Xbox 360),请在您的监视窗口中写入以下内容:
*(int *)iar,x
您应该看到一个值 0xfeNNNNNN,它是陷阱的操作码(通常是 0x0fe00016 = 无条件陷阱)。将其替换为 0x60000000,它是 NOP 的操作码。
于 2008-09-22T14:43:45.483 回答
4
你可以尝试这样的事情:
#define ASSERT(x) {\
if (!(x)) \
{ \
static bool ignore = false; \
if (!ignore) \
{ \
ignore = true; \
__asm int 3 \
} \
}\
}
这应该只触发一次调试。您甚至可以向用户显示一个消息框并询问该做什么:继续(什么都没有发生)、中断(调用 int 3)或忽略(忽略设置为 true,断点不再命中)
于 2011-06-03T14:40:55.803 回答