谷歌測試並不這裏涉及。您的C++標準庫實現拋出一個異常,取決於您的C++標準庫實現,以決定如何詳細設置它的例外。
由於您收到一個例外,我假設您使用的是std::vector::at
而不是std::vector::operator[]
。有幾種可能的方法可以用來獲取更多信息。
首先,你可以使用到operator[]
電話(個人而言,我不覺得at
的異常投擲範圍檢查是非常有用的,它也有一個性能開銷)替代調用at
和使用你的C++標準庫實現的迭代器調試。例如,G ++,如果我用operator[]
與-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.
其次,你可以通過調用test_at
取代調用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);
}
--gtest_catch_exceptions = 0 – JaredC
@JaredC此標誌在引發異常後終止測試,但輸出不會提供有關異常原點的信息(向量,索引,範圍) – clstaudt
@cls:如果您運行在調試器中測試,或在終止後檢查覈心轉儲,然後您應該看到未處理的異常從何處拋出。或者,你可以在'std :: __ throw_out_of_range'上放置一個斷點,這是GNU庫調用來拋出異常的函數。 –