[정보] 매우 대단한 메모리 누수 체크프로그램
페이지 정보
작성자 최고관리자 댓글 0건 조회 1,605회 작성일 20-02-05 16:07본문
Valgrind 라는 프로그램 입니다.
다운로드는 다음의 사이트에서 http://valgrind.org/
받을 수 있습니다.
사용법이 매우 간단합니다.
리눅스에 Valgrind를 설치하고 memory leak이 발생하는 프로그램을 컴파일 할 때 -g옵션을 주어 디버깅 모드로 컴파일 합니다. 그러면 어느 함수의 몇 번 라인에서 memory leak이 발생하는지도 알려줍니다.
실행은 매우 간단합니다.
$valgrind --tool=memcheck --leak-check=full ./leak_program
위와 같이 실행하면 leak_program에서 문제가 있는 부분을 출력해줍니다.
자세한 사용법은 인터넷에서 검색하시면 나옵니다.
매우 유용한 정보라서 올려봅니다.
다음은 툴을 소개하는 글입니다.
2006년 오픈소스어워드에서 상을 받았다고 합니다.
디버깅시에만 사용되니 큰 리스크 없이 적용해볼 수 있을 것 같습니다.
프로그램에서 메모리가 새거나 누수가되면 몇 일동안 잘 돌다가도
갑자기 확 죽어버릴 수 있습니다.
보통 이럴땐 원인이 뭔지도 모르는 경우가 허다하지요.
Valgrind를 이용하면 다음과 같은 걸 찾아줍니다.
touching memory you shouldn't (eg. overrunning heap block boundaries);
using values before they have been initialized;
incorrect freeing of memory, such as double-freeing heap blocks;
memory leaks.
개인적으론 Rational Purify를 주로 사용하는데, Linux에는
Valgrind란 무료툴이 있었네요.
메모리 Leak이나 바운드 에러같은 경우 사람이 직접찾기는 매우
어려울뿐더러 생산성이 매우 떨어지기 때문에 어떤 툴이던지 꼭
사용하시기 바랍니다.
사용방법을 간단히 보겠습니다.
평소 실행 방법 : myprog arg1 arg2
메모리 분석 시 : valgrind --leak-check=yes myprog arg1 arg2
이 때, myprog는 컴파일 시 -g (디버깅옵션)이 반드시 적용되어 있어야 합니다.
exmample.c
#include
void f(void) { int* x = malloc(10 * sizeof(int)); x[10] = 0; // problem 1: heap block overrun } // problem 2: memory leak -- x not freed int main(void) { f(); return 0; }
valgrind 수행시 예상 출력..
problem 1
==19182== Invalid write of size 4
==19182== at 0x804838F: f (example.c:6) ==19182== by 0x80483AB: main (example.c:11) ==19182== Address 0x1BA45050 is 0 bytes after a block of size 40 alloc'd ==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130) ==19182== by 0x8048385: f (example.c:5) ==19182== by 0x80483AB: main (example.c:11)
problem 2
==19182== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130) ==19182== by 0x8048385: f (a.c:5) ==19182== by 0x80483AB: main (a.c:11)
출처: http://cafe.naver.com/aptune.cafe?iframe-x_url=/ArticleRead.nhn%3Farticleid=159
다운로드는 다음의 사이트에서 http://valgrind.org/
받을 수 있습니다.
사용법이 매우 간단합니다.
리눅스에 Valgrind를 설치하고 memory leak이 발생하는 프로그램을 컴파일 할 때 -g옵션을 주어 디버깅 모드로 컴파일 합니다. 그러면 어느 함수의 몇 번 라인에서 memory leak이 발생하는지도 알려줍니다.
실행은 매우 간단합니다.
$valgrind --tool=memcheck --leak-check=full ./leak_program
위와 같이 실행하면 leak_program에서 문제가 있는 부분을 출력해줍니다.
자세한 사용법은 인터넷에서 검색하시면 나옵니다.
매우 유용한 정보라서 올려봅니다.
다음은 툴을 소개하는 글입니다.
2006년 오픈소스어워드에서 상을 받았다고 합니다.
디버깅시에만 사용되니 큰 리스크 없이 적용해볼 수 있을 것 같습니다.
프로그램에서 메모리가 새거나 누수가되면 몇 일동안 잘 돌다가도
갑자기 확 죽어버릴 수 있습니다.
보통 이럴땐 원인이 뭔지도 모르는 경우가 허다하지요.
Valgrind를 이용하면 다음과 같은 걸 찾아줍니다.
touching memory you shouldn't (eg. overrunning heap block boundaries);
using values before they have been initialized;
incorrect freeing of memory, such as double-freeing heap blocks;
memory leaks.
개인적으론 Rational Purify를 주로 사용하는데, Linux에는
Valgrind란 무료툴이 있었네요.
메모리 Leak이나 바운드 에러같은 경우 사람이 직접찾기는 매우
어려울뿐더러 생산성이 매우 떨어지기 때문에 어떤 툴이던지 꼭
사용하시기 바랍니다.
사용방법을 간단히 보겠습니다.
평소 실행 방법 : myprog arg1 arg2
메모리 분석 시 : valgrind --leak-check=yes myprog arg1 arg2
이 때, myprog는 컴파일 시 -g (디버깅옵션)이 반드시 적용되어 있어야 합니다.
exmample.c
#include
void f(void) { int* x = malloc(10 * sizeof(int)); x[10] = 0; // problem 1: heap block overrun } // problem 2: memory leak -- x not freed int main(void) { f(); return 0; }
valgrind 수행시 예상 출력..
problem 1
==19182== Invalid write of size 4
==19182== at 0x804838F: f (example.c:6) ==19182== by 0x80483AB: main (example.c:11) ==19182== Address 0x1BA45050 is 0 bytes after a block of size 40 alloc'd ==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130) ==19182== by 0x8048385: f (example.c:5) ==19182== by 0x80483AB: main (example.c:11)
problem 2
==19182== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130) ==19182== by 0x8048385: f (a.c:5) ==19182== by 0x80483AB: main (a.c:11)
출처: http://cafe.naver.com/aptune.cafe?iframe-x_url=/ArticleRead.nhn%3Farticleid=159
댓글목록
등록된 댓글이 없습니다.