0

私はgdbとmdbの専門家ではありませんが、知っていることは次のとおりです:-

      `(gdb) catch throw` 

これは、例外がスロー
されるたびに中断されます mdb に、例外がスローされるたびに中断する同様のコマンドがありますか?

4

1 に答える 1

2

いいえ、これ自体は存在しません。これは、Solaris では、どの C++ ABI が使用されているか (およびどのように例外がスローされるか) がコンパイラやコンパイル オプションに依存するためです。

mdbはそのすべてを知ろうとしているわけではなく、gdbSolaris でもそうではありません (コンパイルすると、catch throw古いスタイルの Sun CC バイナリでも新しいスタイルの Sun CC バイナリでも動作しません)。

あなたの最善の選択肢は、「C++ ABI フック」が何であるか、つまり、どの隠し/内部関数が呼び出されているかを把握し、throw()それらをブレークポイントすることです。または、これらのフックを見つけたり列挙したりしたら、::catchコマンドを実装する独自のモジュールを作成します (mdb拡張可能です -モジュラーデバッガー)。

編集:(恥知らずなプラグイン)私のこの回答も参照してください(C++例外とDTraceに関して、そこにある「隠された」関数名はmdbブレークポイントにも使用できます)。

于 2012-05-08T18:04:03.800 に答える