查找投掷对象 std::out_of_range
Find object throwing std::out_of_range
我的一个程序抛出了一个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++
(生成的错误消息并发布在访问 Vector 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
即他被告知变量的名称。我的问题是:
有什么方法可以告诉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 shell 中输入bt
(回溯(命令。这将打印堆栈跟踪(导致错误的一系列函数调用(。
要获取变量名称,您现在可以使用up
命令在堆栈中向上导航,并查看每个函数中使用了哪些变量。
在std::out_of_range::out_of_range
上放置断点。异常对象与所有C++对象一样,在其构造函数退出后开始其生命周期。
[编辑]评论说得很清楚:std::out_of_range::what()
产生的问题串。这是实现定义的。显然,在您的情况下,它是由 __FUNCTION__
组成的,这是一个命名当前(即抛出(函数的 GCC 宏。但是这样的函数只知道this
,即指向当前对象的指针,而不是它的名字。在另一种情况下,对象名称是通过其他方法检索的,而不是std::out_of_range::what()
。
要避免在每次抛出异常时都遇到断点并仅在 std::out_of_range
处停止,请在 gdb
中使用以下命令:
catch throw std::out_of_range
然后在命中 breack 点时运行 commad bt
或where
以查看代码中引发异常的位置
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 解决方案在第 25 行执行错误'out of bounds'
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 从 MSVC14 切换到 MSVC16 会导致"compiler is out of heap space (C1060)"错误
- 庞大的初始化列表,如何修复"fatal error C1060: compiler is out of heap space"
- 如何解决'vector subscript out of range'错误?
- 在析构函数中调用"delete"运算符时"compiler is out of heap space"编译器错误
- 空集"Out of bound iterator"
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- 注册 Clang 检查器时出错:"out-of-line-definition of register"
- QList::operator[]中的断言失败<T>:QJoysticks 中的"index out of range"
- 尝试获取矩阵的正确对角线会导致"vector out of range"错误
- 运算符方法和返回对象"out-of-scope"?
- 如何使用 mpi 分散修复"vector subscript out of range"?
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Vector subscript out of range",在返回声明?
- QList<T>::operator[]: "index out of range" 中的断言失败
- 多次调用存储过程时C++连接器"Commands out of sync" mySQL
- 如何处理C++'index out of bounds error'?
- MySQL 异常"connection lost during query"、"MySQL server has gone away"和"command out of sync"