如何在不调试符号的情况下确定从外部库引发的异常

How do you determine what exception is thrown from an external library without debugging symbols?

本文关键字:从外部 异常 情况下 调试 符号      更新时间:2023-10-16

我在使用一段类似于下面的C++代码时遇到了一些问题:

try {
        /* some code here */
} catch(...) {
        /* ... */
}

我正在使用gdb逐步遍历try块中包含的代码,在某个时刻会抛出一些东西。我真的不知道它是什么,因为抛出的函数调用来自一个库,并且没有与之相关的调试符号

gdb有没有办法确定catch块中捕获了什么?

您可以尝试call current_exception(),如果您的平台支持它,它将为当前异常返回exception_ptr。然而,它并没有确切地指定exception_ptr中包含的内容,但您可以使用x对其进行检查,看看是否能找到一些东西。

也有可能某个寄存器包含当前的异常数据,但您没有指定使用的体系结构。