3

アプリケーションでランタイム アサーション エラーが大量に発生しており、そのようなエラーの結果となるアサート条件のランタイム値を調べるために、それぞれのアサーション エラーに対処する必要があります。例えば:

assert ( a == b ) ; 

行番号 100 で失敗しました。実行時に、行番号 100 で何かが発生していることしかわかりません。a と b の実際の値を調べるには、そこにブレーク ポイントを設定する必要があります。

私の質問は、行番号よりもインテリジェントな障害レポートを取得する方法はありますか? 不一致の変数の値を確認したいと思います。

4

3 に答える 3

3

もちろん、言語を利用して独自の assert マクロを定義できます。

#define ASSERT_EQUAL(a,b) if ((a) != (b)) std::cout << "Assertion failed:" << (a) << "!=" << (b) << " at:" << __LINE__

ただし、アサーションに過度に依存している場合は、「例外的な」エラーの一部を例外として表現することをお勧めします。優れたデバッガーはこれらをキャッチし、例外を名前で説明します。ではなく、もっと意味のあることを言うかもしれませんa != b。たとえば、次のようになります。

if (a != b) {
    throw InvalidArgumentsException(a, b);
}

これは便利ですが、デバッグ ビルドとリリース ビルドの両方で例外がスローされるのに対し、アサーションは通常デバッグ ビルドでのみ実行されることを認識することが重要です。

于 2013-01-28T17:27:22.117 に答える
0

デバッガを使用しないのはなぜですか? 優れたデバッガーは、知っておくべきことを教えてくれます。

于 2013-01-28T17:25:56.747 に答える