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