【发布时间】:2017-05-27 05:51:07
【问题描述】:
我们正在为我们的 Visual Studio 解决方案设置 Appveyor,该解决方案生成一个 C++ 库。我们的一些测试 [愚蠢] 模糊 C++ 对象,以确保它们不会做意外的事情。在调试版本中,它会触发一个断言(在发布版本中它只是抛出)。
我们使用自定义断言来避免正在调试的程序崩溃的 Posix 行为。如下所示。如果断言触发并且未附加调试器,则似乎 Appveyor 或操作系统会终止程序:
如果调试器不存在,我们想安装DebugBreak 处理程序。这应该确认它的操作系统正在执行杀戮。理想情况下,处理程序将从 Windows XP 和 VS2002 及更高版本(我们支持的 Windows 组合)开始工作。
我们如何在 Windows 平台上安装 DebugBreak 处理程序?
# define MYLIB_ASSERT(exp) { \
if (!(exp)) { \
std::ostringstream oss; \
oss << "Assertion failed: " << (char*)(__FILE__) << "(" \
<< (int)(__LINE__) << "): " << (char*)(__FUNCTION__) \
<< std::endl; \
std::cerr << oss.str(); \
__debugbreak(); \
} \
}
我们无法确定谁对此负责,因为该行为未在 MSDN 上的 DebugBreak and __debugbreak 或 C/C++ Assertions 记录。
【问题讨论】:
-
DebugBreak handler- 存在您必须安装的通用异常处理程序。没有特别的DebugBreak handler
标签: c++ windows assert debugbreak