それとも、自分のコードだけではなく、すべてですか? 私のプログラムは 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 を使用しています。