魔法の弾丸はわかりませんが、 valgrind / valgrind.hを見ることができます。これには、Valgrindを認識させ、Valgrindで実行している場合の動作を変更するための便利なマクロがいくつかあります。
例えば
#ifndef HAVE_VALGRIND_VALGRIND_H
#define RUNNING_ON_VALGRIND 0
#else
#include <valgrind/valgrind.h>
#endif
if (RUNNING_ON_VALGRIND) {
printf("Hello, this is Valgrind instance %d\n", RUNNING_ON_VALGRIND);
/* set debug output annoyingly high */
/* exit after one request */
}
NDEBUG
また、本番ビルドから除外するために、その全体を混乱させることもできます。
これにより、デバッグするたびにサーバーをいじる必要がなくなり、Valgrindが検出された場合にサーバーが「実行する」だけになります。RUNNING_ON_VALGRINDはvalgrindインスタンスに展開されるか、該当しない場合は0のままになります。
残りの部分(そして、おそらくはから始まる大量のノイズが発生していると思いますinvalid read of size xx
)については、抑制を体系的に適用できます。出力の一部を投稿すると、ファイルに貼り付けることができる抑制の提案を行う方が簡単な場合があります。
ちなみに、Valgrindユーザーのメーリングリストは非常に役立ち、非常に寛容です。また、そこに最も迷惑で無関係なノイズを投稿することもできます。それをかなり迅速に抑制する方法についての返信があります。
リークの概要とその原因となったエントリポイントだけが必要な場合は、他のほとんどすべてをシャットダウンするのはそれほど難しくありません。