2011-07-06 11 views
6

通常、私はそれを未処理のままにして、デバッガ(gdb、Eclipse CDT)にコールスタックを表示します。残念なことに、コードはすべての例外を吸収する第三者のライブラリによって呼び出されています。私はサードパーティのライブラリの前に例外をキャッチすることができますが、私はコールスタックを見ることができません(スタック巻き戻し?)。std :: out_of_rangeがstd :: vector.at()によってスローされる場所を見つける

例外がどこにスローされたかをどのように把握できますか?

答えて

5

catchpoints助けてください?例外がスローされるたびに、gdbにcatch throwコマンドを入力することで中断することができます。 Eclipseでは、gdbコンソールからこれを行うことができます。 this questionを参照してください。

+0

アップアップと感謝!はい、この特定のケースで彼らは助けました:)しかし、未来のために:私は例外のタイプに応じてフィルタリングできますか?サードパーティのライブラリは、フロー制御に対する例外を使用しているので、スローされる例外についての通知が非常に多くなります。 – Ali

+0

@Ali:申し訳ありませんが、私が知っていることはリンクにあります。私はこれに実際の経験はありません。例外の種類を指定する方法はありません。 –

+1

私はあなたの答えを受け入れたいと思いますが、一般的な視聴者のために何をすべきか(gdbコンソールでcatch throwをタイプしてください)とこのリンクを追加してください:http://stackoverflow.com/q/1109922/341970 – Ali

4

例外オブジェクトのコンストラクタにブレークポイントを配置できます。これは例外がスローされる前に発生するため、呼び出しコードを見やすくすることができます。

+0

Upvotedとありがとう!しかし、gdbキャッチスローソリューションで例外をフィルタリングすることはできませんが、out_of_rangeがスローされるところにブレークポイントを設定することで、問題がほぼ解決されます。 – Ali

関連する問題