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)
命中断点后,bt在 gdb shell 中输入(回溯)命令。这将打印堆栈跟踪(导致错误的函数调用序列)。
要获取变量名称,您现在可以使用up命令在堆栈中向上导航,并查看每个函数中使用了哪些变量。