mtrace의 메모리 누수 탐지

----------------
면책 조항 :이 문서는 CSDN 블로거 '수치심 다음 용기 달팽이'원본입니다, BY-SA 저작권 계약, 복제, 원본을 첨부하시기 바랍니다 CC 4.0에 따라 소스 링크 및이 문장.
원본 링크 : HTTPS : //blog.csdn.net/yf210yf/article/details/8022192

 

mtrace는 함수 원형 <mcheck.h>에서 C 함수 선언 및 정의이다 :

 mtrace 보이드 (공극);

사실 mtrace는 malloc에 ​​핸들러의 유사한 malloc_hook는 핸들러 함수 단지 mtrace 시스템이 당신을 위해 작성하지만, 경우 인 시스템을 당신은 /는 어디 작성 가능한 레코드를 malloc을하는 방법을 알고있다인가? 이 작업을 수행하려면 첫 번째 세트 MALLOC_TRACE 환경 변수 전에 mtrace ()를 호출 :

 

사용법 #include <stdlib.h>
에서는 setenv ( "MALLOC_TRACE", "output_file_name", 1);  

 

[Output_file_name] 점포 테스트 결과 파일의 이름이다.
그러나 시험 결과의 형식은 보통 사람이 이해할 수없는,하지만 한 설치 mtrace으로, 그것은, Perl 스크립트의 mtrace 쉘에서 다음 명령을 입력해야 할 것입니다 :
mtrace는 [진] output_file_name은
그 output_file_name이 이해 될 변환 제공 문.
테스트 프로그램 : 예를 들어,

사용법 #include <iostream>
#INCLUDE <mcheck.h>
#INCLUDE <stdlib.h>
사용 스페이스 성병;
INT의 main ()
{
에서는 setenv ( "MALLOC_TRACE", "출력", 1);
mtrace ();
INT * P1 = INT 새로운;
INT * P2 = INT 새로운;
* P3 = INT (INT의 *)의 malloc (sizeof 연산자 (INT));
* P4 = INT (INT의 *)의 malloc (sizeof 연산자 (INT));

P1을 삭제;
무료 (P3);
0을 반환;
}


실행 :
$ G ++ -Wall -g -o 주요 MAIN.CPP

생성

본관

달리기

./본관

생성

출력 파일

보기 출력 파일

$ 메인 출력을 mtrace

메모리 누수는 정보를 얻을 수 있습니다
다음과 같이 전체 운영 정보는 다음과 같습니다

~ / Java_workspace / 3_内存泄露_mtrace $ g ++ -Wall -g MAIN.CPP -o 주 : @ 우분투 달팽이
MAIN.CPP : 'INT 주 ()'기능에서
MAIN.CPP : 10 : 7 : 경고 : 사용되지 않는 변수 'P2'
MAIN.CPP : 12 : 7 : 경고 : 사용되지 않는 변수 'P4'
@ 우분투 달팽이 : ~ / Java_workspace / 3_内存泄露_mtrace $ ./main
@ 우분투 달팽이 : ~ / Java_workspace / 3_内存泄露_ mtrace의 $ 1!
메인 MAIN.CPP 출력
~ / Java_workspace / 3_内存泄露_mtrace $ mtrace 메인 출력 : @ 우분투 달팽이
0x09aa1008 무료 8 alloc'd 적이 0x8778cc -
- 0x09aa10c8 무료 9 alloc'd 적이 0x91556f
- 0x09aa10e0 무료 (10) 0x915577을 alloc'd되지 않았다

메모리가 해제되지 :
-----------------
주소 크기 발신자
0x09aa1478 0x4로 0xe7c679에서
0x09aa1498을 0x4 / 홈 / 달팽이 / Java_workspace가 / 3_内存泄露_mtrace / MAIN.CPP에서 : 12
~ / Java_workspace / 3_内存泄露_mtrace $ @ 우분투 달팽이

 

mtrace 원리는 각각 무료로 해당 malloc에있는 경우, 그것은 무슨 일이 있었는지 / 무료 비 malloc에 대한 메모리 누수, 메모리 누수 문제를 의미하고, mtrace을 찾을 수없는, malloc에없는 각각의 실행을 기록하는 것입니다 .
즉, 새로운 메모리 만 누출을 감지 할 수 있지만 찾을 수 없습니다.
 

팔 버전을 컴파일 된 프로그램이, 팔에 출력 파일을 생성 리눅스에 출력 파일을 복사, mtrace 메인 출력을 사용하여 실행됩니다, 당신은 동일한 메모리 문제를 볼 수 있습니다

 

추천

출처www.cnblogs.com/nanqiang/p/11590083.html