Valgrind で既知の誤検知はありますか? 関数で「条件付きのジャンプまたは移動は、初期化されていない値に依存します」を取得しfmemopen
、C で記述し、GCC でコンパイルします。それが本物だと確信できますか?
編集:抑制ファイルにない既知の問題はありますか? プログラムで実行できることはありますか?実際にはエラーではありませんが、Valgrind はエラーであると言いますか? 既知の問題がある場合は、リストがあると便利です。
はい、Valgrind には誤検知があります。たとえば、特定の glibc および gcc バージョンの抑制ファイルがあるのはそのためです。新しい gcc および glibc で古い valgrind を使用している場合、つまり glibc 2.9 で valgrind 3.3 を使用している場合、誤検出が発生する可能性があります。
そうは言っても、まだ問題を調べて、それが本当に偽陽性であるか (そうであることが判明した場合は、自分で抑制を記述できます)、それともプログラムの本当のバグであるかを調べる必要があります。
ここで何が起こっているのかをすばやく簡単に説明する方法はありませんが、この場合、コードからライブラリ コードに初期化されていない値を渡していると思われます。Valgrindオプションを試してください--track-origins=yes
。初期化されていない値がどこから来たのかを示します。それがあなたのコードである場合は、おそらく初期化する必要があります。ライブラリ内にある場合は、誤検知であるか、ライブラリ呼び出し引数の値が正しくないことが原因である可能性があるため、それらを確認してください。
Valgrind にはいくつかのデフォルトのエラー抑制が付属していますが、すべてのライブラリをカバーしているわけではありません。
エラー チェック ツールは、GNU C ライブラリや、GNU/Linux システムにプリインストールされている X11 クライアント ライブラリなどの基本ライブラリの多数の問題を検出します。これらを簡単に修正することはできませんが、これらのエラーを見たくはありません (もちろん、たくさんあります!)。そのため、Valgrind は起動時に抑制するエラーのリストを読み取ります。デフォルトの抑制ファイルは、システムの構築時に ./configure スクリプトによって作成されます。
コードとは無関係であることがわかっている独自のエラー抑制を作成できます。
Debian SSL は、Valgrind でいくつかの誤検出を修正することによって動機付けられたものではありませんか?