我不是gdb和mdb的专家,但我所知道的是: -
`(gdb) catch throw`
任何时候抛出异常都会中断 我在mdb中有任何类似的命令,只要抛出异常就会中断吗?
答案 0 :(得分:2)
不,这不存在;那是因为在Solaris上,它取决于您正在使用C ++ ABI的编译器和/或编译选项(以及如何抛出异常)。
mdb
并未试图了解所有这些,并且Solaris上的gdb
也不是(如果您编译它,catch throw
将无法使用旧版本或新版本式Sun CC二进制文件)。
你最好的选择是找出“C ++ ABI钩子”是什么,即在throw()
上调用哪些隐藏/内部函数,并断点那些。或者,一旦找到/枚举了这些钩子,编写自己的模块,实现::catch
命令(mdb
是可扩展的 - 模块化调试器)。
编辑:(无耻插件)另见this answer of mine(关于C ++异常和DTrace;“隐藏”函数名称也可用于mdb
个断点)