VS2008附加调试器(C++)来处理assert(...)

发布于 2024-08-20 19:36:38 字数 571 浏览 6 评论 0原文

我有兴趣在我的断言中改进两个场景。 1)定期启动调试构建应用程序,如果有断言,我会收到“调试断言失败”对话框,其中包含“中止”、“重试”、“忽略”。中止和忽略答案工作正常。重试的问题。如果我点击重试,我会得到无用的“应用程序错误,已到达断点”“确定”-终止,“取消”-调试程序。

是否可以避免此对话框并直接进入显示调试器选择的“即时调试器”对话框?据我所知,“应用程序错误”对话框是由英特尔上的 __debugbreak()_asm int 3 触发的,因此在按下“重试”后,我需要附加调试器,而无需使用 _asm int 3. 这可能吗?我找不到任何执行此操作的 WinAPI

2) 在 VS 调试器中启动调试构建应用程序(使用 F5)。如果触发断言,我不想看到任何对话框,我希望它在断言上停止。我设法安装了 crt 调试运行时挂钩,如果 IsDebuggerPresent 那么我 __debugbreak() 并且它停止在断言行上。当我调试 Windows Mobile 版本时,它工作得很好,但我仍然收到 Win32 版本的对话框:“APP.exe 已触发断点”、“中断”、“继续”和灰色的“忽略”。有什么办法可以完全禁用它吗?

There are two scenarios that I'm interested to improve in my assert.
1) a debug build app is started regularly, if there is an assertion I'm getting "Debug assertion failed" dialog box with "Abort", "Retry", "Ignore". Abort and Ignore answers are working fine. The problem with Retry. If I hit retry I'm getting that useless "Application error, breakpoint has been reached" "OK" - to terminate, "Cancel" - to debug the program.

Is it possible to avoid this dialog and go directly to the "Just in time debugger" dialog that shows choices for debuggers? I understand that the "Application error" dialog box is triggered by __debugbreak() or _asm int 3 on intel, so after "Retry" was pressed I need to attach debugger without using _asm int 3. Is this possible? I couldn't find any WinAPI that does this

2) A debug build app is started in VS debugger (using F5). If an assert is triggered I don't want to see any dialog, I want it to stop right on the assert. I managed to install crt debug runtime hooks and if IsDebuggerPresent then I __debugbreak() and it stops on the line of the assert. It works perfectly when I'm debugging windows mobile builds, but I'm still getting a dialog box for Win32 builds: "APP.exe has triggered a breakpoint", "Break", "Continue", and greyed out "Ignore". Any way to completely disable it?

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

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

发布评论

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

评论(1

多情出卖 2024-08-27 19:36:38

查看注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug。

我认为如果将 Auto 设置为 1,调试器就会自动启动。

当然,更改断言实现也可以帮助您(看看 John Robbins 著名的“调试 Windows 应用程序”书中的 SuperAssert)。

Take a look at the registry entry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug.

I think that if you set Auto to 1, that the debugger is automatically started.

And of course changing the assert implementation can also help you (take a look at the SuperAssert of John Robbins from his famous Debugging Windows Applications book).

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