выполнение valgrind прерывания при ошибке для проверки на повреждение кучи?

#valgrind #abort #heap-corruption

#valgrind #прервать #повреждение кучи

Вопрос:

Я хотел бы попробовать использовать valgrind для некоторого обнаружения повреждения кучи. Со следующим повреждением «модульного теста»:

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

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

   memset( c, 0xAB, 20 ) ;
   printf("not abortedn") ;

   return 0 ;
}
  

Я был удивлен, обнаружив, что valgrind не прерывается при ошибке, а просто выдает сообщение:

valgrind -q --проверка на утечку = нет ответа.выход 
==11097 == Недопустимая запись размера 4 
==11097 == в 0x40061F: main (в / home/hotellnx94/peeterj /tmp /a.out)
==11097 == Адрес 0x51c6048 равен 8 байтам внутри выделенного блока размером 10 
==11097 == в 0x4A2058F: malloc (vg_replace_malloc.c:236)
==11097 == по 0x400609: main (в / home/hotellnx94/peeterj/tmp/a.out)
...
не прервано

Я не вижу опции valgrind для прерывания при ошибке (как это делает mcheck в gnu-libc, но я не могу использовать mcheck, потому что это не потокобезопасно). Кто-нибудь знает, возможно ли это (стандартный вывод нашего кода dup2 в / dev / null, поскольку он выполняется как демон, поэтому отчет бесполезен, и я бы предпочел поймать виновника с поличным или ближе к нему).

Ответ №1:

В valgrind нет такой опции.

Рассмотрите возможность добавления режима, отличного от демона (режим отладки), в ваш демон.

http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs 4.6 объясняет некоторые запросы от отлаживаемой программы к valgrind memcheck, поэтому вы можете использовать некоторые из них в своем демоне для выполнения некоторых проверок на фиксированных позициях кода.