Я не знаю о волшебной пуле, но вы можете взглянуть на 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 чрезвычайно полезен и очень терпим. Вы также можете разместить там свой самый раздражающий и не относящийся к делу шум, и вы получите ответы о том, как довольно быстро его подавить.
Если все, что вам нужно, это сводка утечек и точек входа, которые привели к ним, не должно быть слишком сложно закрыть почти все остальное.