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

Mat*_*ský 5 c++ unit-testing stl

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

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

我必须将对原始代码的更改保持在绝对最小值.

感谢帮助

Mat*_* M. 3

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

该标准定义了许多保证(尤其是 C++0x 保证)以及函数是否抛出异常是这些保证的一部分。比如std::vector<T>::operator[]不会扔。

话虽这么说,可能有很多技巧(用于调试的特定编译标志,或者更改 STL 中使用的宏,如果有的话),但它是高度具体的。

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