【发布时间】:2019-10-06 14:32:12
【问题描述】:
我目前正在维护一个内存池。我最近在这个池中添加了 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之类的东西——确实存在类似的东西?有没有更好的方法来完成我想做的事情?
【问题讨论】: