我必须为一些写得不好的C ++代码编写测试。问题是代码在许多情况下会导致STL断言/调试中断(通常由诸如字符串/向量的边界之外的访问等愚蠢错误引起),这会导致测试终止。
是否可以使STL抛出异常(可以捕获)而不仅仅是崩溃?
我必须将对原始代码的更改保持在绝对最低限度。
感谢您的帮助
答案 0 :(得分:3)
这绝对取决于您使用的STL。也就是说,它可能根本不可能。
标准定义了许多保证(特别是C ++ 0x保证)以及函数是否抛出是这些保证的一部分。例如,std::vector<T>::operator[]
不会抛出。
话虽如此,可能会有一些技巧(用于调试的特定编译标志,或者更改STL中使用的宏,如果有的话),但它将具有高度的特异性。
另一种解决方案可能是尝试在虚拟化环境中运行该程序。例如,在Linux上,您可以在Valgrind下运行它。它将报告访问错误,但实际上不会停止程序执行。