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>に含ま
std名前空間を使用しました。
メインINT()
{
のsetenv( "MALLOC_TRACE"、 "出力"、1)。
MTRACE();
int型* P1 =新しいint型;
int型* P2 =新しいint型;
int型* P3 =(int型*)のmalloc(はsizeof(int型));
int型* P4 =(int型*)のmalloc(はsizeof(int型));

P1を削除します。
無料(P3)。
0を返します。
}


実行:
$ G ++ -Wall -g -oメインmain.cppに

生成

メイン

ラン

。/メイン

生成

出力ファイル

ビューの出力ファイル

$メイン出力をMTRACE

メモリリークが情報を取得することができ
、完全な動作情報を以下のとおりです。

〜/ Java_workspace / 3_内存泄露_mtrace $ G ++ -Wall -g main.cppに-oメイン:@ Ubuntuのカタツムリ
main.cppに: 'int型のmain()'関数で
main.cppに:10:7:警告:未使用変数'P2'
main.cppに:12:7:警告:未使用の変数は'p4'
@ Ubuntuのカタツムリ:〜/ Java_workspace / 3_内存泄露_mtrace $ ./main
@ Ubuntuのカタツムリ:〜/ Java_workspace / 3_内存泄露_ MTRACEする$ LS
メインmain.cppに出力
〜/ Java_workspace / 3_内存泄露_mtrace $ MTRACEメイン出力:@ Ubuntuのカタツムリ
0x09aa1008無料8 alloc'dていませんでした0x8778cc -
- 0x09aa10c8無料9 alloc'dていませんでした0x91556f
- 0x09aa10e0無料10 0x915577をalloc'dませんでした

メモリ解放されていない:
-----------------
アドレスサイズ発信者
0xe7c679で0x09aa1478 0x4の
0x09aa1498 0x4のでは/ home /カタツムリ/ Java_workspace / 3_内存泄露_mtrace / main.cppに:12
〜/ Java_workspace / 3_内存泄露_mtrace $:@ Ubuntuのカタツムリ

 

MTRACE原理は、それぞれが自由に対応するmalloc関数を持っている場合、それは何が起こったのか/無料以外のmallocにはメモリリーク、メモリリークの問題がないことを意味し、MTRACEを見つけることができない、のmallocフリーの各実行を記録することです。
つまり、新しいメモリのために、唯一の漏れを検出することができますされていますが、設置することができません。
 

腕のバージョンをコンパイルされたプログラムは、腕の出力ファイルを生成するのLinuxへの出力ファイルをコピーし、MTRACEメイン出力を使用するために実行されます、あなたは同じメモリの問題を表示することができます

 

おすすめ

転載: www.cnblogs.com/nanqiang/p/11590083.html