问题:我正在尝试使用 GTest 作为测试框架的作业。该代码定义了一个“通用”文件,其中为系统定义了异常,我在代码中使用它:
throw ExceptionType::OUT_OF_RANGE;
但是,当运行 GTest 时,我收到以下消息:
unknown file: Failure
Unknown C++ exception thrown in test body.
我的问题是: 我如何使用 GTest 框架运行 gdb 来追踪这个错误,它与代码或其他内容中定义的异常相关。
这是失败的测试:
/** Test that matrix initialization works as expected */
TEST(StarterTest, InitializationTest) {
auto matrix = std::make_unique<RowMatrix<int>>(2, 2);
// Source contains too few elements
std::vector<int> source0(3);
std::iota(source0.begin(), source0.end(), 0);
EXPECT_TRUE(ThrowsBustubException([&]() { matrix->FillFrom(source0); }, ExceptionType::OUT_OF_RANGE));
// Source contains too many elements
std::vector<int> source1(5);
std::iota(source1.begin(), source1.end(), 0);
EXPECT_TRUE(ThrowsBustubException([&]() { matrix->FillFrom(source1); }, ExceptionType::OUT_OF_RANGE));
// Just right
std::vector<int> source2(4);
std::iota(source2.begin(), source2.end(), 0);
EXPECT_NO_THROW(matrix->FillFrom(source2));
for (int i = 0; i < matrix->GetRowCount(); i++) {
for (int j = 0; j < matrix->GetColumnCount(); j++) {
const int expected = (i * matrix->GetColumnCount()) + j;
EXPECT_EQ(expected, matrix->GetElement(i, j));
}
}
}
你可以试试这个:
throw Exception(ExceptionType::OUT_OF_RANGE, "out of range");
您应该抛出属于标准库的异常,并使用自定义异常(ExceptionType::OUT_OF_RANGE)进行填充。
问题是如何用
gdb
发现问题。 运行 gdb,在执行 run
之前,先执行 catch throw
。 gdb
将在引发异常的行处中断。 凭记忆打字:
% gdb --args myGtestExecutable
(gdb) catch throw
(gdb) run
...
break at line xxx
(您的问题主题是关于“未知文件:失败”,这似乎不是您的实际问题...我想知道“未知文件:失败”是什么意思。这似乎是一个错误gtest 捕获异常)