使用MinGW 4.6.2(使用g ++ -g -std = c ++ 0x)编译以下内容,std::out_of_range如果我尝试,gdb似乎不想捕获catch throw.如果我throw手动它抓得很好,我做错了什么?
#include <stdexcept>
#include <vector>
int main()
{
std::vector<char> vec(10);
try {
vec.at(10); // this won't be caught by gdb
// throw std::out_of_range(""); // this will
}
catch (std::out_of_range const& e) {
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,异常是由which is a inside 函数std::vector::at()引发的,因此我怀疑 Mingw 上存在一些问题,导致 GDB 无法在共享库中设置捕获点。或者也许你的系统不是用.__throw_out_of_rangelibstdc++.solibstdc++-g
如果您配置了 GCC,那么--enable-libstdcxx-debug您将拥有第二组构建的库,-O0 -g这在调试时可能会更好地工作,但该选项不经常使用。