计算valgrind错误而不报告它们

问题描述 投票:0回答:1

我目前正在维护内存池。我最近向该池添加了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的东西-确实存在类似的东西?有没有更好的方法来完成我想做的事?

c valgrind
1个回答
0
投票

您可以做的是使用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可以如果错误计数与预期不符,则输出错误。

© www.soinside.com 2019 - 2024. All rights reserved.