web-dev-qa-db-ja.com

gdbで失敗したアサートを解除する適切な方法は何ですか?

プログラムで失敗したアサートをキャプチャしようとしています。カスタム関数やマクロではなく、assert()を直接呼び出すライブラリを使用しています。このライブラリ内で、現在、いくつかの移植関連のバグを追跡しようとしています。関連するすべてのものは、g ++のデバッグシンボルでコンパイルされています。

私が見つけた最良の解決策は、アサートのfile:行で、アサート式の条件を壊すことです。これにより、失敗する前にアサートで停止できますが、恐ろしい解決策です。失敗する可能性のあるアサートごとに特別な設定が必要であり、私のIDEでは機能せず、一般にあまりにも多くの労力を要します。

anyでブレークアサートするには、gdbとgccを使用して、呼び出しスタックとスコープの範囲内の変数を調べることができる方法でアサートに失敗しましたアサート呼び出し?

ソリューションでアサートの失敗を破棄して実行を継続できる場合はさらに良いでしょう。

23
user3995702

abort()にブレークポイントを設定するのが最善のようです。

break abort gdbのCLI。

25
Peter M

上記の提案がうまくいかない場合は、__ assert_fail関数を中断してみてください。

break __assert_fail

名前はおそらく実装に依存していますが、プラットフォームでのアサートマクロの定義を見れば簡単にわかります。これにより、SIGABRTの前に中断できます。

3
Islam Boziev