【问题标题】:making valgrind abort on error for heap corruption checking?使valgrind中止错误以进行堆损坏检查?
【发布时间】:2011-05-11 21:19:12
【问题描述】:

我想尝试使用 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== 大小为 4 的无效写入 ==11097== 在 0x40061F:主要(在 /home/hotellnx94/peeterj/tmp/a.out 中) ==11097== 地址 0x51c6048 在大小为 10 的块内分配了 8 个字节 ==11097== 在 0x4A2058F: malloc (vg_replace_malloc.c:236) ==11097== by 0x400609: main (in /home/hotellnx94/peeterj/tmp/a.out) ... 未中止

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

【问题讨论】:

    标签: valgrind abort heap-corruption


    【解决方案1】:

    valgrind 中没有这个选项。

    考虑在您的守护程序中添加非守护程序模式(调试模式)。

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

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2012-10-20
      • 2010-12-07
      • 2017-08-05
      • 2011-07-24
      相关资源
      最近更新 更多