0

コードがクラッシュするという(おそらく非常に一般的な)問題があります。

unknown location(0): fatal error in "BaumIteration_OneDimensionCase": memory access violation at address: 0xfffffff8: no mapping at fault address

最適化されたビルド用 (Linux の gcc では -O3) ですが、デバッグ ビルドでは問題なく動作します。リリース ビルドをデバッグしようとしましたが、有用な情報が得られません。この問題を解決するための標準的な手法は何ですか?

他の質問では、誰かがvalgrindの使用を提案しました。この特定の状況でどのように使用すればよいですか (とにかくこれが正しい方法である場合...)?

4

3 に答える 3

1

前述のように、いくつかのコード バグがありますが、異なるコードが生成され、使用されるメモリ アドレスが原因で、最適化されていないデバッグ ビルドに表示されないことがあります。

valgrind について尋ねたので、使用する必要がある特定の valgrind ツールは memcheck です。コードの実行時分析を行います。メモリリーク、配列のオーバーバウンドアクセス(読み取り/書き込み)、二重解放などのヒープエラーで発生する可能性のあるエラーまたは警告を見つけるのに役立ちます...

Linux プラットフォームを使用している場合、valgrind でバイナリを実行する方法は次のとおりです。

valgrind --tool=memcheck  --leak-check=full --show-reachable=yes --log-file=valgrind-log.txt -v --track-origins=yes <your binary file>

valgrind memcheck の詳細については、こちらをご覧ください。

また、可能であれば、g++ を使用して をビルドする場合は、次のコンパイラ オプションをビルド プロセスに追加します。

-Wall -Wextra -pedantic -Wuninitialized

g++ によってスローされたエラー/警告を分析します。エラーの考えられる原因を示す場合があります。

がんばってデバッグ!

于 2013-02-26T11:28:46.340 に答える
0

おそらくデバッグ ビルドにも存在する問題ですが、メモリ レイアウトと破損しているものにより、表示されない可能性があります。開始点として、すべての動的割り当て、解放、配列、ポインター、初期化されていない変数を見てください!

この問題に直面した場合、コードサイズを段階的に縮小して、問題が存在するかどうかを確認します。この方法で問題の原因となっている場所を見つけることができます!

于 2013-02-25T11:09:44.460 に答える