Valgrind に特定のライブラリを無視させることは可能ですか? 質問する

Valgrind に特定のライブラリを無視させることは可能ですか? 質問する

それとも、自分のコードだけではなく、すべてですか? 私のプログラムは Gtk、Loudmouth、その他いくつかのものを使用していますが、これら 2 つ (およびそれらの背後にある libgcrypto、libssl) 自体が多数のエラーを引き起こしているため、自分のコードを検出できません。valgrind が自分のコードよりも深いところから来るものを無視するようにすることは可能ですか?

ベストアンサー1

あなたが実行していると仮定するとメモリチェックツールを無視したいリークエラーlibcryptoのみ、あなたは抑制のように:

{
   ignore_libcrypto_conditional_jump_errors
   Memcheck:Leak
   ...
   obj:*/libcrypto.so.*
}

... をファイルに書き込んで に渡しvalgrindます--suppressions=FILENAME

無視するリークエラーすべての共有ライブラリいかなるライブラリディレクトリ(/ライブラリ/lib64ライブラリlib64 の、...):

{
   ignore_unversioned_libs
   Memcheck:Leak
   ...
   obj:*/lib*/lib*.so
}
{
   ignore_versioned_libs
   Memcheck:Leak
   ...
   obj:*/lib*/lib*.so.*
}

可能性は低いですが、X11 および GTK ライブラリの場所を考慮して、ディレクトリ パターンのバリエーションを追加する必要がある場合があります。

ライブラリによって呼び出されたコールバックによって発生したエラーは無視されることに注意してください。これらのコールバックでエラーをキャッチすると、ほとんど完了する:

{
   ignore_unversioned_libs
   Memcheck:Leak
   obj:*/lib*/lib*.so
   ...
   obj:*/lib*/lib*.so
}
{
   ignore_versioned_libs
   Memcheck:Leak
   obj:*/lib*/lib*.so.*
   ...
   obj:*/lib*/lib*.so.*
}

... しかし、これにより、Valgrind malloc を使用するライブラリによる呼び出しのエラーが明らかになります。valgrind malloc は、動的ライブラリとしてロードされるのではなく、プログラム テキストに直接挿入されるため、独自のコードと同じようにスタックに表示されます。これにより、Valgrind は割り当てを追跡できますが、要求どおりに実行することが難しくなります。

参考までに: 私は valgrind 3.5 を使用しています。

おすすめ記事