查找抛出std :: out_of_range的对象

ele*_*kil 6 c++ debugging stl exception

我的一个程序抛出一个std::out_of_range.我知道原因,我正在访问带索引的向量-1.我不知道的是代码中的向量名称(变量名称)和位置.我的程序生成的错误消息如下所示:

terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check
zsh: abort (core dumped)  ./main.x config.cfg  
Run Code Online (Sandbox Code Playgroud)

而其他人的代码(他也使用g++)并在问题C++访问向量中发布的错误消息如下所示:

Error for vec.at(i).setVec(tmp);
Error is:  terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check  
Run Code Online (Sandbox Code Playgroud)

即他被告知变量的名称.我的问题是:

有没有办法告诉g++/ gcc给我扩展信息?甚至可能包括行号(不知道这是否可能,但嘿,一个人可以梦想;)).
只是为了funsies我跑我的程序中gdb使用catch thrown的选项(我要补充,我有接近零的经验,在使用实际的调试器),它并没有告诉我任何新的东西都不好,事实上,它并没有告诉我的错误是由于std::out_of_range例外.

顺便说一句,我的编译器标志(用于调试)是:

CFLAGS = --exceptions -I$(ROOTSYS)/include --std=c++11 -Wall -g -O0 -fno-inline -fno-eliminate-unused-debug-types
Run Code Online (Sandbox Code Playgroud)

Bas*_*evs 4

命中断点后,bt在 gdb shell 中输入(回溯)命令。这将打印堆栈跟踪(导致错误的函数调用序列)。

要获取变量名称,您现在可以使用up命令在堆栈中向上导航,并查看每个函数中使用了哪些变量。