此处不涉及 Google 测试。您的 C++ 标准库实现正在引发异常,由您的 C++ 标准库实现来决定使其异常的详细程度。
由于您遇到异常,我假设您使用std::vector::at
的是std::vector::operator[]
. 您可以采取几种可能的方法来获取更多信息。
首先,您可以将调用替换为at
调用operator[]
(我个人认为at
' 的异常抛出范围检查不是很有用,并且它确实有性能开销)并使用您的 C++ 标准库实现的迭代器调试。例如,对于 g++,如果我使用operator[]
并编译 with-D_GLIBCXX_DEBUG
来打开 的范围检查operator[]
,我会收到类似于以下内容的错误:
/usr/include/c++/4.3/debug/vector:237:error: attempt to subscript container
with out-of-bounds index 0, but container only holds 0 elements.
其次,您可以将调用替换为at
调用test_at
或类似调用:(未经测试)
template <typename T>
T& test_at(std::vector<T>& v, size_t n) {
// Use Google Test to display details on out of bounds.
// We can stream additional information here if we like.
EXPECT_LT(n, v.size()) << "for vector at address " << &v;
// Fall back to at, and let it throw its exception, so that our
// test will terminate as expected.
return v.at(n);
}