【发布时间】:2013-01-20 07:14:13
【问题描述】:
我的一个程序抛出一个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
而其他人的代码产生的错误消息(他也使用g++)并发布在问题C++ accessing vector中看起来像这样:
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
即他被告知变量的名称。我的问题是:
有什么方法可以告诉g++/gcc 给我扩展信息吗?甚至可能包括行号(不知道这是否可能,但是嘿,一个人可以梦想;))。
只是为了好玩,我在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
【问题讨论】:
-
在运行
gdb和catch throw后,当捕获到异常时,键入where。 -
@DavidSchwartz 完美!所以现在我从
gdb得到了行号,有没有机会得到第二条错误消息(即没有调试器的名称)?
标签: c++ debugging exception stl