gpt4 book ai didi

valgrind - 使 valgrind 因堆损坏检查错误而中止?

转载 作者:行者123 更新时间:2023-12-02 19:44:30 26 4
gpt4 key购买 nike

我想尝试使用 valgrind 进行一些堆损坏检测。通过以下腐败“单元测试”:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
char * c = (char *) malloc(10) ;

memset( c, 0xAB, 20 ) ;
printf("not aborted\n") ;

return 0 ;
}

我惊讶地发现 valgrind 不会因错误而中止,而只是生成一条消息:

valgrind -q --leak-check=no a.out==11097== Invalid write of size 4==11097==    at 0x40061F: main (in /home/hotellnx94/peeterj/tmp/a.out)==11097==  Address 0x51c6048 is 8 bytes inside a block of size 10 alloc'd==11097==    at 0x4A2058F: malloc (vg_replace_malloc.c:236)==11097==    by 0x400609: main (in /home/hotellnx94/peeterj/tmp/a.out)...not aborted

我没有看到出现错误时中止的 valgrind 选项(就像 gnu-libc 的 mcheck 那样,但我不能使用 mcheck,因为它不是线程安全的)。有人知道这是否可能吗(我们的代码 dup2 的标准输出到/dev/null 因为它作为守护进程运行,所以报告没有用,我宁愿捕获罪魁祸首或更接近罪魁祸首)。

最佳答案

valgrind 中没有这样的选项。

考虑将非守护程序模式( Debug模式)添加到您的守护程序中。

http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs 4.6 解释了从调试程序到 valgrind+memcheck 的一些请求,因此您可以在守护进程中使用其中一些在固定代码位置进行一些检查。

关于valgrind - 使 valgrind 因堆损坏检查错误而中止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5970748/

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