2011-05-28 50 views
5

我必须为一些写得不好的C++代码编写测试。问题在于代码在许多情况下(通常是由于访问超出字符串/向量范围之外的愚蠢错误导致)导致STL断言/调试中断,从而导致测试终止。如何让STL抛出异常而不是断言?

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

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

感谢您的帮助

+2

您正在使用哪种标准库实现? – 2011-05-28 10:31:01

+0

我目前在VS 2010上,但代码应该是多平台的(至少是GCC和VS的最后一个主要版本)。 – 2011-05-28 10:38:18

+6

我无法在这里看到问题......使用调试器,它会完全告诉你在什么情况下断言发生,修复它,移动到下一个。如果您想在短时间内忽略某些问题,许多测试框架允许您跳过或跳到某个特定的测试,但断言对于调试是非常棒的。 – 2011-05-28 10:54:50

回答

3

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

该标准定义了许多保证(特别是C++ 0x之一)以及函数是否抛出是这些保证的一部分。例如std::vector<T>::operator[]不会抛出。这就是说,可能有一些技巧(特定的编译标志用于调试,或者更改STL中使用的宏,如果有的话),但它将是非常具体的。

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