查找 std::vector.at() 抛出 std::out_of_range 的位置

Posted

技术标签:

【中文标题】查找 std::vector.at() 抛出 std::out_of_range 的位置【英文标题】:Finding where std::out_of_range is thrown by std::vector.at() 【发布时间】:2011-07-06 22:06:43 【问题描述】:

通常我会不处理它,调试器(gdb、Eclipse CDT)会向我显示调用堆栈。不幸的是,该代码被吸收所有异常的第三方库调用。我可以在第三方库之前捕获异常,但是我看不到调用堆栈(堆栈展开?)。

如何确定异常是在哪里引发的?

【问题讨论】:

【参考方案1】:

catchpoints 会帮忙吗?只要在 gdb 中输入catch throw 命令,您就可以在抛出异常时中断。在 Eclipse 中,您可以通过 gdb 控制台执行此操作。见this question。

【讨论】:

点赞,谢谢!是的,在这种特殊情况下,他们提供了帮助 :) 但是对于未来:我可以根据异常类型进行过滤吗?第三方库使用异常来控制流......所以我会收到太多关于抛出异常的通知。 @Ali:对不起,我知道的在链接中。我对此没有任何实际经验。我看不到指定异常类型的方法。 我愿意接受您的回答,但请为普通观众添加更多信息(在 gdb 控制台中键入 catch throw)和此链接:***.com/q/1109922/341970【参考方案2】:

您可以在异常对象的构造函数中放置一个断点。由于这发生在抛出异常之前,因此您可以很好地了解调用代码。

【讨论】:

赞成并感谢!我无法使用 gdb catch throw 解决方案过滤异常,但是,在抛出 out_of_range 的位置放置一个断点几乎可以解决问题。

以上是关于查找 std::vector.at() 抛出 std::out_of_range 的位置的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 2d 矢量成员引用对象

《 常见算法与数据结构》符号表ST——二叉查找树 (附动画)

为啥 BufferedStream.Write 会抛出“此流不支持查找操作”?

😍查找😍

在 MySQL 8 中使用点数据类型和 st_distance_sphere 查找最近的地方

Django Json 字段过滤器抛出查找错误