gdb没有捕获vector引发的std :: out_of_range

use*_*267 8 c++ gdb mingw

使用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)

Jon*_*ely 3

正如您所看到的,异常是由which is a inside 函数std::vector::at()引发的,因此我怀疑 Mingw 上存在一些问题,导致 GDB 无法在共享库中设置捕获点。或者也许你的系统不是用.__throw_out_of_rangelibstdc++.solibstdc++-g

如果您配置了 GCC,那么--enable-libstdcxx-debug您将拥有第二组构建的库,-O0 -g这在调试时可能会更好地工作,但该选项不经常使用。