gpt4 book ai didi

计算 valgrind 错误而不报告它们

转载 作者:行者123 更新时间:2023-11-30 14:36:00 24 4
gpt4 key购买 nike

我目前正在维护一个内存池。我最近向该池添加了 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 可以如果错误计数不符合预期,则输出错误。

关于计算 valgrind 错误而不报告它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com