В момента поддържам пул памет. Наскоро добавих извиквания на функция 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
- съществува ли нещо подобно? Има ли по-добър начин да постигна това, което искам да направя?