是否可以用调试中断或错误抛出替换所有标准错误对话框?

Is replacing all standard error-dialogs with debug-breaks or error-throws possible?

我想用 throwdebug-break 替换任何标准错误对话框(对于标准,我指的是我未明确编写的任何内容) 因为就像在原因部分描述的那样,它会导致 Windows-Service 有时无法调试。

为了做到这一点,我确实尝试定义如下内容:

-D "_HAS_ITERATOR_DEBUGGING=0"

但上面确实只是禁用了错误对话框并且确实不足以追踪问题,所以我希望它 throw-exceptiondebug-break 而不是显示错误对话框.

你还有什么建议我定义或做的吗?

原因:

在开发 Windows-服务时,我费了好大劲才找到导致服务器崩溃的错误:

复制:

通过下面的 运行 服务(在调试模式下编译)您可以重现此问题:

#include <unordered_map>

// will cause crash by trying to increment iterator pointing to end
inline static void simulateCrash() {
    typedef std::unordered_map<quint32, quint32> Hash;
    Hash list;
    list[0xC001] = 0xDEAD;
    Hash::iterator it = list.begin();
    it = list.erase(it);
    ++it; // should crash here
}

您可能想使用 _set_invalid_parameter_handler 覆盖默认处理程序,它会终止程序并显示运行时错误消息。

_CrtSetReportMode 也可用于避免来自 _CrtDbgReport 的对话(用于多次检查)。