글

라벨이 valgrind인 게시물 표시

Memory check - Mtrace vs Valgrind (how long does it take)

Mtrace vs Valgrind mtrace와 valgrind 둘 중 어느것이 memory 오류 검출 시 걸리는 시간을 비교했습니다. 테스트 code 1. (mtrace 사용 시 주석 해제 후 재빌드) #include <stdio.h> #include <stdlib.h> //#include <mcheck.h> int main () { char * test; for ( int i = 0 ; i < 10000 ; i ++ ) { //mtrace(); test = malloc( 10 ); free(test); //muntrace(); } printf( "hello world \n " ); return 0 ; } 속도 비교 일반 실행 -bash-4.2 $ time ./hello hello world real 0m0.002s user 0m0.000s sys 0m0.002s mtrace 사용 시 -bash-4.2 $ time ./hello hello world real 0m0.234s user 0m0.039s sys 0m0.188s valgrind 사용 시 -bash-4.2 $ time valgrind --leak-check = full ./hello == 15079 == Memcheck, a memory error detector == 15079 == Copyright ( C ) 2002-2013, and GNU GPL ' d, by Julian Seward et al. == 15079 == Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info == 15079 == Command: ./hello == 15079 == hello world == 15079 == == 15079 == ...

Linux useful tool Valgrind(dynamic analysis). 02 Memcheck (leak)

Valgrind의 memcheck 기능 중 leak의 기능을 살펴보겠습니다. 이 기능은 heap메모리에 메모리 할당,메모리 해제을 분석합니다. memory leak은 실행 시 '--leak-check' 옵션으로 추적할 수 있으며 기본 설정은 summry입니다. * --leak-check=<no|summary|yes|full> [default: summary] 소스 빌드 및 실행  $  cc -o hello hello.c -g3 -O0  $ valgrind ./hello 결과 -bash-4.2$ valgrind ./hello ==31359== Memcheck, a memory error detector ==31359== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==31359== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info ==31359== Command: ./hello ==31359== leak ==31359== ==31359== HEAP SUMMARY: ==31359==     in use at exit: 10 bytes in 1 blocks ==31359==   total heap usage: 1 allocs, 0 frees, 10 bytes allocated ==31359== ==31359== LEAK SUMMARY: ==31359==     definitely lost: 10 bytes in 1 blocks ==31359==    indirectly lost: 0 bytes in 0 blocks ==31359==      poss...

Linux useful tool Valgrind(dynamic analysis). 02 Memcheck

Memcheck는 메모리 관련 에러를 찾을 수 있는 vlagrind의 기능입니다. 검출 가능한 에러 접근 불가능한 영역에 대한 메모리 접근. 예) heap 영역의 오버런 또는 언더런, stack 영역의 오버런, 메모리 해제 후 사용 접근 정의되지 않은 값. 예) 초기화 되지 않음 힙 영역의 잘못된 메모리 해제. 예) double free, 메모리 할당과 해제의 미스 매칭 memcpy함수의 src / dst가 겹치는 경우 메모리 할당 시 인자로 이상한 값을 전달하는 경우 메모리 누수 위와 같은 에러를 찾을 수 있기 때문에 memcheck를 활용하는 것은 프로그램의 신뢰성을 높일 수 있습니다. 사용자가 오래 사용하여 검증되었다고 생각하는 코드는 메모리 에러를 생각하지 않을 뿐더러 소스 코드로 검출하는 작업도 오래 사용해서 문제가 없을 것이라는 인식 때문에 자세히 보지 않게 됩니다. 특히나 매우 작은 메모리가 지속적으로 누수 되는 것은 코드로 보았을 때 찾기 힘들 뿐더러, 장시간 프로그램을 동작하지 않으면 누수가 나는지 조차도 모를 수 있습니다. valgrind는 이런 작은 부분의 메모리 에러까지 확인할 수 있습니다. 참고 자료 http://valgrind.org/docs/manual/mc-manual.html

Linux useful tool Valgrind(dynamic analysis). 01 Introduction

Valgrind 는 linux 동적분석 툴 입니다. 별도의 소스 수정 없이 바이너리가 실행된 후에 아래와 같은 분석이 가능합니다. Memcheck : 메모리 에러 검출 (메모리 leak, 잘못된 메모리 사용 등) Cachegrind : 캐시 사용 분석 Callgrind : call 순서를 graph로 분석 Helgrind : 쓰레드 에러 분석 DRD : 쓰레드 에러 분석, Helgrind와 다른 분석 방식을 사용함. Massif : heap 메모리 프로파일 DHAT : heap 메모리 분석 SGcheck : stack, global array 분석 BBV : 블록 벡터 생성기 Valgrind는 정적 분석에서 발견하지 못한 에러를 검출할 수 있는 강력한 툴 입니다. 모든 사용법은 아니더라도 Memcheck는 사용법을 익혀 메모리 에러를 검출하는 것이 프로그램의 신뢰성을 높힐 수 있습니다.