GDB 捕获抛出,然后忽略异常

gdb catch throw and then ignore exceptions

本文关键字:然后 异常 GDB      更新时间:2023-10-16

我在多线程应用程序中崩溃,无论出于何种原因,我都无法在堆栈部分展开之前捕获异常。

所以现在我试图通过连接 gdb 并使用 catch throw 来捕获它。但是,我得到了许多其他不相关和捕获的异常。我怎么能忽略这些呢?

我尝试了ignore 1 1000000,但这不仅忽略当前关注的异常,而且忽略catch throw异常。

任何想法我只能忽略那个特定的? 例如,也许通过文件和行号?

从 7.9 版本开始,gdb 包含了一些方便的功能,如 $_caller_is$_any_caller_is 。 这些可以用作断点上的条件,使其仅在看到某个调用堆栈时才停止。

因此,例如,如果您知道引发异常的位置,则可以执行以下操作:

(gdb) catch throw if $_any_caller_is("functionname")

但是,如果您知道抛出函数,在我看来,在该特定throw处设置断点会更简单。

在某些情况下,另一种选择是按类型筛选异常。 此功能自版本 7.7 起内置于 catch throw 中。 此表单接受与类型名称匹配的正则表达式:

(gdb) catch throw NameOfType