如何使STL抛出异常而不是断言?

时间:2011-05-28 10:29:10

标签: c++ unit-testing stl

我必须为一些写得不好的C ++代码编写测试。问题是代码在许多情况下会导致STL断言/调试中断(通常由诸如字符串/向量的边界之外的访问等愚蠢错误引起),这会导致测试终止。

是否可以使STL抛出异常(可以捕获)而不仅仅是崩溃?

我必须将对原始代码的更改保持在绝对最低限度。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

这绝对取决于您使用的STL。也就是说,它可能根本不可能。

标准定义了许多保证(特别是C ++ 0x保证)以及函数是否抛出是这些保证的一部分。例如,std::vector<T>::operator[]不会抛出。

话虽如此,可能会有一些技巧(用于调试的特定编译标志,或者更改STL中使用的宏,如果有的话),但它将具有高度的特异性。

另一种解决方案可能是尝试在虚拟化环境中运行该程序。例如,在Linux上,您可以在Valgrind下运行它。它将报告访问错误,但实际上不会停止程序执行。