2011-05-11 5 views
3

일부 힙 손상 탐지를 수행하기 위해 valgrind를 사용하고 싶습니다. 다음과 같은 손상 "단위 테스트"와 :힙 손상 검사에서 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의 stdout은/dev/null입니다. 그래서 보고서가 유용하지 않고 행동의 범인을 잡을 것입니다).

답변

2

valgrind에는 이러한 옵션이 없습니다.

데몬에 비 데몬 모드 (디버그 모드)를 추가하는 것이 좋습니다.

http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs 4.6은 디버깅 된 프로그램에서 valgrind + memcheck에 대한 일부 요청을 설명하므로 데몬에서 일부를 고정 코드 위치에서 검사 할 수 있습니다.

관련 문제