我们正在为我们的 Visual Studio 解决方案设置 Appveyor,该解决方案生成一个 C++ 库。我们的一些测试 [愚蠢] 模糊 C++ 对象,以确保它们不会做意外的事情。在调试版本下,它会触发一个断言(在发布版本中它只是抛出)。
我们使用自定义断言来避免正在调试的程序崩溃的 Posix 行为。如下所示。如果断言触发并且未附加调试器,则似乎 Appveyor 或操作系统会终止程序:
DebugBreak
如果调试器不存在,我们想安装一个处理程序。这应该确认它的操作系统正在执行杀戮。理想情况下,处理程序将从 Windows XP 和 VS2002 及更高版本开始工作(这些是我们支持的 Windows 组合)。
我们如何DebugBreak
在 Windows 平台上安装处理程序?
# 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 和 __debugbreak或C/C++ Assertions没有记录该行为。