在linux下面使用mtrace来检查一般的程序的内存溢出
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。De
bug起来也是比较累人。其实linux系统下有一个使用的工具可以帮忙来调试的,这就是
mtrace。Mtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的
用法。
使用mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的函数
功能。
1. 在需要跟踪的程序中需要包含头文件<mcheck.h>,而且在main()函数的最开始包含
一个函数调用:mtrace()。由于在main函数的最开头调用了mtrace(),所以该进程后面
的一切分配和释放内存的操作都可以由mtrace来跟踪和分析。
2. 定义一个环境变量,用来指示一个文件。该文件用来输出log信息。如下的例子:
$export MALLOC_TRACE=mymemory.log
3. 正常运行程序。此时程序中的关于内存分配和释放的操作都可以记录下来。
4. 然后用mtrace使用工具来分析log文件。例如:
$mtrace testmem $MALLOC_TRACE
下面我们看一个例子:
[hwang@langchao test]$ cat testmtrace.c
#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *hello;
mtrace();
hello = (char*) malloc(20);
sprintf(hello,"nhello world!");
return 1;
}
[hwang@langchao test]$export MALLOC_TRACE=mytrace.log
[hwang@langchao test]$ gcc testmtrace.c -o testmtrace
[hwang@langchao test]$./testmtrace
[hwang@langchao test]$ mtrace testmtrace mytrace.log
Memory not freed:
-----------------
Address Size Caller
0x08049860 0x14 at /usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/init.c:0
---

ref:

http://www.cnblogs.com/wangbin/archive/2011/09/30/2196287.html

[ARM] [linux master] 调试技术002 在linux下面使用mtrace来检查一般程序的内存溢出相关推荐

  1. [ARM] [linux master] 调试技术001 GDB-Advanced-001 Code Dump 的调试

    GDB 作为开源调试的基本工具的使用,几乎是每个linux程序猿必须掌握的 1 Code Dump的原因 2 Code Dump的基本调试 2.1 printf 的办法 在不同进程直接,不同符号表的跨 ...

  2. linux内核调试技术 kprobe使用与实现

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术.利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集 ...

  3. 嵌入式linux的调试技术

    本章介绍了嵌入式linux的调试技术,例如,设置断点.逐步跟踪代码.输出调试信息等. Printk函数用于打印内核调试信息,运行在内核空间,printf函数运行在用户空间.Printk文件是一个简单的 ...

  4. Linux内核调试技术指南

    前两天,完成了ucos在2440上的移植,以及boot的修改.今天突然想到,我在linux下,该如何来编写,调试比较复杂的驱动.我想这个问题应该从如何调试内核入手,先转载两个文字,待西西看来. 系统搭 ...

  5. linux内核 printk实现,Linux内核调试技术之printk

    1.简介(基于s3c2440 linux) 在内核调试技术之中,最简单的就是printk的使用了,它的用法和C语言应用程序中的printf使用类似,在应用程序中依靠的是stdio.h中的库,而在lin ...

  6. 第10章 嵌入式linux的调试技术

    一.      防止函数printk降低linux性能: 利用C语言中的编译指令(#if.#else.#endif等). 现在修改printk_demo驱动代码,通过编译指令定义了一个pr_debug ...

  7. linux安全配置技术论文,基于linux平台的web安全技术研究apache安全大学论文.doc

    基于linux平台的web安全技术研究apache安全大学论文 广州大学华软软件学院 --毕业论文 题目-Apache安全 学生姓名: 指导教师2015-5-10 摘 要 随着网络通信技术的不断发展, ...

  8. linux服务器管理技术试卷,《Linux网络操作系统配置与管理》试卷D含答案

    <Linux 管理与服务器配置>试卷D 第1页,共4页 密 密 封 线 内 不 得 答 题 <Linux 网络操作系统配置与管理>试卷D (考时:90分钟) 适用专业: 课程代 ...

  9. linux检查是否有D进程,Linux内核调试技术——进程D状态死锁检测

    Linux的进程存在多种状态,如TASK_RUNNING的运行态.EXIT_DEAD的停止态和 TASK_INTERRUPTIBLE的接收信号的等待状态等等(可在include/linux/sched ...

最新文章

  1. 如何读取服务器信息吗,New Features Introduced in IIS 10.0 Version 1709
  2. vmware安装centos8步骤
  3. MySQL排序ORDER BY与分页LIMIT,SQL,减少数据表的网络传输量,完整详细可收藏
  4. 西安电子科技计算机专业,2020西安电子科技大学计算机专业课改考
  5. Learning a Discriminative Feature Network for Semantic Segmentation(语义分割DFN,区别特征网络)...
  6. appdata文件太大了可以删除吗?
  7. win10用计算机分区,win10电脑硬盘要不要分区
  8. java实现十进制数转换成二进制数
  9. 环路分析仪Bode100
  10. Chance Gym - 101086L——二进制,素数
  11. 最新版FusionCharts2D面积图
  12. PS2键盘第二套键盘扫描码学习发现
  13. 寻址方式(有效地址的计算)
  14. 三硝基溴硼亚酞菁(BTNSubPc)齐岳生物介绍酞菁溶解度,定制多种酞菁材料
  15. 关于QQ pc端登录界面的测试用例 11——28
  16. mysql not exists无效_MySQL MATCH AGAINST无效
  17. CUMT学习日记——信号与系统之考试复习的记录
  18. 数据库缓存一致性问题
  19. BitTorrent BT服务器
  20. linux pptp设置账号不能同时登录 查询已登录用户

热门文章

  1. Billboard HDU - 2795(树状数组,单点修改,区间查询)
  2. 看完这篇你们团队的代码也很规范
  3. c语言 年月日比较大小
  4. pytest基础入门
  5. 算法训练营 重编码_编码训练营后十四天如何找到工作
  6. 排列公式和组合公式_排列与组合:排列公式与组合公式之间有什么区别?
  7. 数据库代码编写_如何将您的职业转变为数据科学-即使您今天不编写代码。
  8. R语言在金融中的运用一
  9. python是值传递还是引用传递_Python里参数是值传递还是引用传递?
  10. Java面试:Java面试总结PDF版