私はc++例外を使い始めたばかりで、それを正しくしたいと思っています。私が念頭に置いているのは、例外がキャッチされたときに、ある種のバックトレース情報を生成することです。当初、C ++の例外については、コールスタックに似たアイデアがありましたが、最終的にはそれがあまり良くないことがわかりました。
また、gcc C ++アプリがクラッシュしたときにスタックトレースを生成する方法も読みましたが、現在のプロジェクトをさらに複雑にしたくありません。デバッグモードの場合にのみバックトレースが必要なので、その目的でgdbを使用できることを期待していました。
私の戦略は、catch
ブロックにブレークポイントを挿入してから、呼び出しスタックを上に移動して、例外が最初にスローされた理由(またはその原因)を正確に特定することでしたか?残念ながら、gdbがブレークポイントに到達すると、呼び出しスタックがクリアされ、mainのみが表示されるため(ここでキャッチ)、これを実行できないようです。これは起こるはずですか、それとも私はここで何か間違ったことをしていますか?
編集: 私は他の人々のためにここで方法を要約するのが好きです:
最初の方法(paulsm4による)。catch throw
スローでキャッチするため、またはキャッチでキャッチするためのキャッチポイントビアを設定してくださいcatch catch
!次に電話backtrace
2番目の方法(asheplerによる)ブレークポイントをオンに設定し__cxa_throw
てからbacktrace
3番目の方法(Qt Creatorの場合-使用する場合)throwまたはcatchにブレークポイントを簡単に設定できます!
Edit_2: Qt Creatorデバッガーを使用すると、ブレークポイントを設定することも:)__cxa_begin_catch
と同等のようです。catch catch