- 8
- 0
- 约7.17万字
- 约 30页
- 2017-08-10 发布于河南
- 举报
应用 Valgrind 发现 Linux 程序的内存问题
简介
调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者只需仔细考虑程序如何运行,并对问题进行有根有据的猜测。
在修复 bug 之前,首先要确定在源程序中的位置。例如,当一个程序产生崩溃或生成核心转储(core dump)时,您就需要了解是哪行代码发生了崩溃。在找到有问题的代码行之后,就可以确定这个函数中变量的值,函数是如何调用的,更具体点说,为什么会发 生这种错误。使用调试器查找这些信息非常简单。
本文将简要介绍几种用于修复一些很难通过可视化地检查代码而发现的 bug 的技术,并阐述了如何使用在 Linux on Power 架构上可用的工具。
HYPERLINK /developerworks/cn/linux/l-pow-debug/ \l ibm-pcon 回页首
调试内存问题的工具和技术
动态内存分配看起来似乎非常简单:您可以根据需要分配内存 —— 使用 malloc() 或其变种 —— 并在不需要时释放这些内存。实际上,内存管理的问题是软件中最为常见的 bug,因为通常在程序启动时这些问题并不明显。例如,程序中的内存泄漏可能开始并不为人注意,直到经过多天甚至几个月的运行才会被发现。接下来的几节将 简要介绍如何使用流行的调试器 Valgrind 来发现并调试这些最常见的内存 bug。
在开始使用任何调试工具之前,请考虑这个工具是否对重新编译应用程序有益,是否可以支持具有调试信息的库(-g 选项)。如果没有启用调试信息,调试工具可以做的最好的事情也不过是猜测一段特定的代码是属于哪个函数的。这使得错误消息和概要分析输出几乎没有什么用处。使用 -g 选项,您就有可能获得一些信息来直接指出相关的代码行。
Valgrind
Valgrind 已经在 Linux 应用程序开发社区中广泛用来调试应用程序。它尤其擅长发现内存管理的问题。它可以检查程序运行时的内存泄漏问题。这个工具目前正由 Julian Seward 进行开发,并由 Paul Mackerras 移植到了 Power 架构上。
要安装 Valgrind,请从 Valgrind 的 Web 站点上下载源代码(参阅 HYPERLINK /developerworks/cn/linux/l-pow-debug/ \l resources 参考资料)。切换到 Valgrind 目录,并执行下面的命令:
# make
# make check
# make install
Valgrind 的错误报告
Valgrind 的输出格式如下:
清单 1. Valgrind 的输出消息
# valgrind du –x –s
.
.
==29404== Address 0x1189AD84 is 0 bytes after a block of size 12 allocd
==29404== at 0xFFB9964: malloc (vg_replace_malloc.c:130)
==29404== by 0xFEE1AD0: strdup (in /lib/tls/libc.so.6)
==29404== by 0xFE94D30: setlocale (in /lib/tls/libc.so.6)
==29404== by 0 main (in /usr/bin/du)
==29404== 是进程的 ID。消息 Address 0x1189AD84 is 0 bytes after a block of size 12 allocd 说明在这个 12 字节的数组后面没有存储空间了。第二行以及后续几行说明内存是在 130 行(vg_replace_malloc.c)的 strdup() 程序中进行分配的。strdup() 是在 libc.so.6 库的 setlocale() 中调用的;main() 调用了 setlocale()。
未初始化的内存
最为常见的一个 bug 是程序使用了未初始化的内存。未初始化的数据可能来源于:
未经初始化的变量
malloc 函数所分配的数据,在写入值之前使用了
下面这个例子使用了一个未初始化的数组:
清单 2. 使用未初始化的内存
2 {
3 int i[5];
4
5 if (i[0] == 0)
6 i[1]=1;
7 return 0;
8 }
在这个例子中,整数数组 i[5] 没有进行初始化;因此,i[0] 包含的是一个随机数。因此使用 i
您可能关注的文档
- 中国式管理--人力资源管理VS组织人员发展试卷100分及讲义.doc
- 事业单位公开招聘信息技术试题.doc
- 云南大学工商管理硕士(MBA)学位论文要求.doc
- 五年级数学三、四单元复习.ppt
- 人大经济金融课件 金融学精编版ppt 003第三章 金融g19.ppt
- 二组:新读书无用论在农村的现状——以罗坪镇为例.doc
- 五上U4课时02_道滘镇中心小学陈欢咏.doc
- 丙级技术士网页设计术科-试题的革新与解决之道.ppt
- 人力资源管理师基础知识教材第四章:管理心理与组织行为.doc
- 仁爱版英语七下6.2.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
原创力文档

文档评论(0)