私はgdbとmdbの専門家ではありませんが、知っていることは次のとおりです:-
`(gdb) catch throw`
これは、例外がスロー
されるたびに中断されます mdb に、例外がスローされるたびに中断する同様のコマンドがありますか?
いいえ、これ自体は存在しません。これは、Solaris では、どの C++ ABI が使用されているか (およびどのように例外がスローされるか) がコンパイラやコンパイル オプションに依存するためです。
mdb
はそのすべてを知ろうとしているわけではなく、gdb
Solaris でもそうではありません (コンパイルすると、catch throw
古いスタイルの Sun CC バイナリでも新しいスタイルの Sun CC バイナリでも動作しません)。
あなたの最善の選択肢は、「C++ ABI フック」が何であるか、つまり、どの隠し/内部関数が呼び出されているかを把握し、throw()
それらをブレークポイントすることです。または、これらのフックを見つけたり列挙したりしたら、::catch
コマンドを実装する独自のモジュールを作成します (mdb
拡張可能です -モジュラーデバッガー)。
編集:(恥知らずなプラグイン)私のこの回答も参照してください(C++例外とDTraceに関して、そこにある「隠された」関数名はmdb
ブレークポイントにも使用できます)。