0

我不是 gdb 和 mdb 方面的专家,但我知道的是:-

      `(gdb) catch throw` 

这将在任何时候引发异常时中断
我在 mdb 中有任何类似的命令会在任何时候引发异常时中断吗?

4

1 回答 1

2

不,这不存在。这是因为在 Solaris 上,它取决于您的编译器和/或正在使用哪个 C++ ABI 的编译选项(以及如何抛出异常)。

mdb没有试图了解所有这些,gdb在 Solaris 上也没有(如果您编译它,catch throw将无法使用旧式或新式 Sun CC 二进制文件)。

您最好的选择是弄清楚“C++ ABI 钩子”是什么,即正在调用哪些隐藏/内部函数throw(),并为它们设置断点。或者,一旦你找到/枚举了这些钩子,编写你自己的模块来实现一个::catch命令(mdb是可扩展的 -模块化调试器)。

编辑:(无耻插件)另见我的这个答案(关于 C++ 异常和 DTrace;那里的“隐藏”函数名称也可用于mdb断点)。

于 2012-05-08T18:04:03.800 回答