我想用throw
或debug-break
替换任何标准的错误对话框(标准我指的是我没有明确写的任何内容)因为在描述的原因部分中,它会导致Windows服务的调试有时是不可能的。
要做到这一点,我确实尝试定义类似的东西:
-D "_HAS_ITERATOR_DEBUGGING=0"
但上面只是禁用了错误对话框,实际上还不足以追踪问题,所以我希望throw-exception
或debug-break
而不是显示错误对话框。
你有什么建议我定义或做的吗?
在开发Windows服务时,我遇到了一些导致服务器崩溃的错误:
std::unordered_map
错误std::unordered_map
功能git
历史记录并重新检查所有最近的更改才有可能找到问题通过在服务中运行(在调试模式下编译),您可以重现此问题:
#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
的对话(用于几个检查)。