我目前正在维护内存池。我最近向该池添加了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
的东西-确实存在类似的东西?有没有更好的方法来完成我想做的事?
您可以做的是使用valgrind客户请求VALGRIND_COUNT_ERRORS。
valgrind.h等说:
...
/* Can be useful in regression testing suites -- eg. can
send Valgrind's output to /dev/null and still count
errors. */
VG_USERREQ__COUNT_ERRORS = 0x1201,
...
/* Counts the number of errors that have been recorded by a tool. Nb:
the tool must record the errors with VG_(maybe_record_error)() or
VG_(unique_error)() for them to be counted. */
因此,类似:valgrind --log-file = / dev / null your_program将把valgrind错误报告给/ dev / null,然后your_program可以如果错误计数与预期不符,则输出错误。