我在多线程应用程序中崩溃,无论出于何种原因,我都无法在堆栈部分解开之前捕获异常。
所以现在我试图通过与gdb连接并使用catch throw
来捕获它。但是,我得到了许多其他不相关和被捕获的异常。我怎么能忽略那些?
我尝试ignore 1 1000000
,但这并不会忽略当前所关注的异常,而是忽略所有catch throw
例外。
我有什么想法可以忽略那个特定的一个吗?例如也许是通过文件和行号?
答案 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