6

#defineing_GLIBCXX_DEBUGは、範囲外のSTLアクセス、無効なイテレータなど、C++のランタイムエラーの大規模なクラスをGCCにキャッチさせます。

残念ながら、エラーが発生した場合、印刷されたメッセージはあまり役に立ちません。__FILE__関数と__LINE__マクロを使ってバックトレースを印刷する方法を自分で知っています。

_GLIBCXX_DEBUGGCCにそうするように説得する簡単な方法はありますか、またはキャッチする種類のエラーが実際に発生したときに呼び出す関数/マクロを指定する方法はありますか?

4

2 に答える 2

3

GCCで使用される内部ヘッダーファイルのファイル名と行番号ではなく、コードで使用されるコンテキストを出力するメッセージが必要だと思います。

.../debug/macros.hすべてのチェックコードがと呼ばれるを使用するという点で、単一のマクロがあるように見えます_GLIBCXX_DEBUG_VERIFY。ニーズに合わせて変更できます。

編集:ジョナサン・ウェイクリーは、すべてのチェックが致命的であると指摘しています。

于 2012-07-25T22:03:25.817 に答える
3

デバッグモードチェックが失敗すると、を呼び出すabort()ため、デバッガーで簡単に調べて失敗した場所を確認できるコアファイルをダンプします。プログラムをデバッガーで実行すると、プログラムが中止されると停止し、。を使用してスタックトレースを出力できますbacktrace

abort()これを自動化するには、呼び出しを(in )に変更する必要がありますlibstdc++-v3/src/c++11/debug.cc。呼び出すように変更してから、独自のをstd::terminate()インストールして、バックトレースを出力することができると思います。terminate_handlerset_terminate

于 2012-07-29T00:56:29.573 に答える