当程序在调试模式下编译并调用 abort() 或以其他方式崩溃时,会弹出一个错误对话框,询问是否应启动调试器。如何防止出现此对话框?它需要通过在这个程序中运行的命令来完成,或者可能从启动它的程序来完成--因此更改注册表不是一个选择。只应更改此特定程序的行为。(类似的问题已经有了答案,但据我所知,没有一个回答了这个特殊的用例。
7cjasjjr1#
你看到的是 * 不是 * Windows错误报告。Windows Error Reporting是一个将崩溃转储(通常是小型转储)上传到服务器的功能,以便开发人员可以诊断部署产品上发生的错误。“中止/重试/继续”对话框是C和C运行时库的调试版本的一项功能。当调用abort时,它们将显示该对话框。这是默认行为。事实证明,您可以使用_set_abort_behavior控制其中的一些内容。在调试版本中默认启用的Assert失败显示类似的对话框。如果构建并链接运行时库的发布版本,这些对话框将不会出现(正如Hans Passant在评论中所说)。其他崩溃,如取消引用空指针,是通过引发异常来发出信号的。即使您没有使用C风格的异常,也存在系统级异常--通常称为异步异常。这些是由访问冲突、DebugBreak和其他事件触发的。C++异常有时被称为同步异常。在Windows上,它们通常使用异步异常来实现。如果您连接了调试器(如果您从Visual Studio启动程序,则通常是这种情况),则调试器将检测到first chance and unhandled exceptions。在大多数情况下,默认设置将导致调试器挂起程序执行,从而使开发人员有机会进行调查。如果不希望出现这种行为,可以修改调试器设置,或者直接运行程序而不附加调试器。
abort
DebugBreak
1条答案
按热度按时间7cjasjjr1#
你看到的是 * 不是 * Windows错误报告。Windows Error Reporting是一个将崩溃转储(通常是小型转储)上传到服务器的功能,以便开发人员可以诊断部署产品上发生的错误。
“中止/重试/继续”对话框是C和C运行时库的调试版本的一项功能。当调用
abort
时,它们将显示该对话框。这是默认行为。事实证明,您可以使用_set_abort_behavior控制其中的一些内容。在调试版本中默认启用的Assert失败显示类似的对话框。如果构建并链接运行时库的发布版本,这些对话框将不会出现(正如Hans Passant在评论中所说)。
其他崩溃,如取消引用空指针,是通过引发异常来发出信号的。即使您没有使用C风格的异常,也存在系统级异常--通常称为异步异常。这些是由访问冲突、
DebugBreak
和其他事件触发的。C++异常有时被称为同步异常。在Windows上,它们通常使用异步异常来实现。如果您连接了调试器(如果您从Visual Studio启动程序,则通常是这种情况),则调试器将检测到first chance and unhandled exceptions。在大多数情况下,默认设置将导致调试器挂起程序执行,从而使开发人员有机会进行调查。如果不希望出现这种行为,可以修改调试器设置,或者直接运行程序而不附加调试器。