gdb catch throw然后忽略异常

时间:2017-03-21 08:33:09

标签: c++ gdb

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

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

我尝试ignore 1 1000000,但这并不会忽略当前所关注的异常,而是忽略所有catch throw例外。

我有什么想法可以忽略那个特定的一个吗?例如也许是通过文件和行号?

1 个答案:

答案 0 :(得分:0)

从版本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