linux 内存调试,linux 下使用mtrace进行内存调试

Use

The function mtrace installs handlers for

malloc, realloc and free;

the function muntrace disables these handlers. Their

prototypes,

defined in the header file mcheck.h, are

void mtrace(void);

void muntrace(void);

The handlers log all memory allocations and frees to a file

defined by the environment

variable MALLOC_TRACE (if the variable is unset, describes an

invalid filename, or describes a filename the user does not have

permissions to, the handlers are not installed).

A perl script called

mtrace, not to be confused with the function of the

same name, is also distributed with the GNU C Library; the script

parses through the output file and reports all allocations that

were not freed.。

Usage example

Bad Source

Code

The following is an example of bad source code. The problem with

the program is that it allocates memory, but doesn’t free the

memory before exiting.

#include

int main() {

int * a;

a = malloc(sizeof(int));

return 0;

}

MTrace Usage

1. The environment variable “MALLOC_TRACE” must be set to the path of the output file. Setting environment variables is slightly different on every shell type. In the BASH shell on Linux, the command is as follows:

MALLOC_TRACE=/home/YourUserName/path/to/program/MallocTraceOutputFile.txt

export MALLOC_TRACE;

2. The required library (“mcheck.h”) must be included in the source code. This is done by adding the following line to the top of the .c or .cpp file, as shown below:

#include

3. The function “mtrace()” must be called before you start allocating memory. It is usually easiest to call mtrace() at the very beginning of the main function.

mtrace();

4. The program should be compiled and run. Note that you need to use the -g option to enable profiling. In GCC on Linux, this can be done using the following commands:

gcc yourProgram.c -g

./a.out

5. The memory leak information will be reported in the file specified by the MALLOC_TRACE environment variable. The difficulty is, this file will be in a computer-readable format. Most Linux machines come with a console command called “mtrace”, that converts the computer file into human-readable text as shown below. If you do not have access to this console command, there is a perl script that can be downloaded and will accomplish the same task. mtrace follows the following syntax:

mtrace

For example:

mtrace a.out MallocTraceOutputFile.txt

MTrace

Output

If the mtrace command reports “No Memory Leaks”, then all memory that was allocated in the last execution of that program was also released, which is the way it should be. If, on the other hand, mtrace gives output such as that below, it means the programmer still has some work to do.

Memory not freed:

-----------------

Address Size Caller

0x08049910 0x4 at /home/sureshsathiah/tips/leak.c:9

Good Source

Code

The following is an example of great source code. It releases memory after it is allocated, and it uses mtrace to notify the programmer if there are memory leaks.

#include

#include

int main() {

mtrace();

int * a;

a = malloc(sizeof(int));

free(a);

muntrace();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值