2

次のありそうもないコードの奇妙なシナリオに遭遇しました。

try{
  throw Core::ValueError();
}
catch (Core::Error &e){
  ...
}

(ValueError は std::exception から継承されます)

実行可能ファイルにコンパイルされた場合は例外がキャッチされますが、特定の共有ライブラリにコンパイルされた場合は例外がキャッチされません。

そして私の質問:

  1. 例外処理プロセスであるブラック ボックスの内部を覗くために使用できるデバッグ ツールやテクニックは何ですか? gdbでステップスルーできますか?

  2. 特定のcatch句による特定の例外のキャッチ可能性について何かを教えてくれるMach-oヘッダーから引き出すことができる情報はありますか? 特に、「gcc_except_tab」セクションとその素敵な LSDA、またはシンボル テーブル、または別の部分を見て、シンボルの可視性または例外のキャッチに関連するその他の問題を推測できますか?

ニワトリ、7 つのネズミの尾、および粒子加速器を使用した解決策を主張するオンライン ソースを見つけましたが、最初に StackOverflow を試して、黒魔術を最後の手段として残すことにしました。

(OSX 10.6.7 で i686-apple-darwin10-g++-4.2.1 を実行しています)

4

1 に答える 1