В настоящее время я поддерживаю пул памяти. Недавно я добавил вызовы функций valgrind в этот пул, чтобы сделать его более полезным для обнаружения ошибок valgrind, возникающих при использовании указанного пула. Что я хочу сделать с этим, так это написать модульный тест, чтобы проверить, правильно ли работают мои вызовы функций valgrind. Например.,
int main(void)
{
int * test = pool_malloc(sizeof(*test)); // details not important
*test = 3;
pool_free(test); // details not important
if (*test == 2)
{
printf("HERE");
}
assert(VALGRIND_COUNT_ERRORS == 1);
}
Этот код теперь правильно дает мне недопустимую ошибку чтения, тогда как раньше этого не было, поскольку даже если память была возвращена в пул, на самом деле это не было free
-d. Однако я не могу использовать именно этот код, поскольку наша среда модульного тестирования предполагает, что любые ошибки valgrind означают, что тест не пройден, и поэтому мой вышеприведенный тест не пройден. Я пытался использовать VALGRIND_DISABLE_ERROR_REPORTING
, но это также, по-видимому, отключает не только отчетность, но и проверку на наличие ошибок, то есть VALGRIND_COUNT_ERRORS
теперь возвращает 0. Что мне действительно нужно, так это что-то вроде VALGRIND_DISABLE_ERROR_REPORTING_BUT_KEEP_COUNTING_ERRORS_THAT_OCCUR
- существует ли что-то подобное? Есть ли лучший способ выполнить то, что я хочу сделать?