- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
简介
调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者只需仔细考虑程序如何运行,并对问题进行有根有据的猜测。
在修复bug之前,首先要确定在源程序中的位置。例如,当一个程序产生崩溃或生成核心转储(coredump)时,您就需要了解是哪行代码发生了崩溃。在找到有问题的代码行之后,就可以确定这个函数中变量的值,函数是如何调用的,更具体点说,为什么会发生这种错误。使用调试器查找这些信息非常简单。
本文将简要介绍几种用于修复一些很难通过可视化地检查代码而发现的bug的技术,并阐述了如何使用在LinuxonPower架构上可用的工具。
回页首
调试内存问题的工具和技术
动态内存分配看起来似乎非常简单:您可以根据需要分配内存——使用malloc()或其变种——并在不需要时释放这些内存。实际上,内存管理的问题是软件中最为常见的bug,因为通常在程序启动时这些问题并不明显。例如,程序中的内存泄漏可能开始并不为人注意,直到经过多天甚至几个月的运行才会被发现。接下来的几节将简要介绍如何使用流行的调试器Valgrind来发现并调试这些最常见的内存bug。
在开始使用任何调试工具之前,请考虑这个工具是否对重新编译应用程序有益,是否可以支持具有调试信息的库(-g选项)。如果没有启用调试信息,调试工具可以做的最好的事情也不过是猜测一段特定的代码是属于哪个函数的。这使得错误消息和概要分析输出几乎没有什么用处。使用-g选项,您就有可能获得一些信息来直接指出相关的代码行。
Valgrind
Valgrind已经在Linux应用程序开发社区中广泛用来调试应用程序。它尤其擅长发现内存管理的问题。它可以检查程序运行时的内存泄漏问题。这个工具目前正由JulianSeward进行开发,并由PaulMackerras移植到了Power架构上。
要安装Valgrind,请从Valgrind的Web站点上下载源代码(参阅参考资料)。切换到Valgrind目录,并执行下面的命令:
#make
#makecheck
#makeinstall
Valgrind的错误报告
Valgrind的输出格式如下:
清单1.Valgrind的输出消息
#valgrinddu–x–s
.
.
==29404==Address0x1189AD84is0bytesafterablockofsize12allocd
==29404==at0xFFB9964:malloc(vg_replace_malloc.c:130)
==29404==by0xFEE1AD0:strdup(in/lib/tls/libc.so.6)
==29404==by0xFE94D30:setlocale(in/lib/tls/libc.so.6)
==29404==by0main(in/usr/bin/du)
==29404==是进程的ID。消息Address0x1189AD84is0bytesafterablockofsize12allocd说明在这个12字节的数组后面没有存储空间了。第二行以及后续几行说明内存是在130行(vg_replace_malloc.c)的strdup()程序中进行分配的。strdup()是在libc.so.6库的setlocale()中调用的;main()调用了setlocale()。
未初始化的内存
最为常见的一个bug是程序使用了未初始化的内存。未初始化的数据可能来源于:
未经初始化的变量
malloc函数所分配的数据,在写入值之前使用了
下面这个例子使用了一个未初始化的数组:
清单2.使用未初始化的内存
2{
3inti[5];
4
5if(i[0]==0)
6i[1]=1;
7return0;
8}
在这个例子中,整数数组i[5]没有进行初始化;因此,i[0]包含的是一个随机数。因此使用i[0]的值来判断一个条件分支就会导致不可预期的问题。Valgrind可以很容易捕获这种错误条件。当您使用Valgrind运行这个程序时,就会接收到下面的消息:
清单3.Valgrind的输出消息
您可能关注的文档
- 11-12程序设计及算法语言上级考试试卷A电类.doc
- 起重机械安全使用培训(原创).pptx
- 2025秋苏科版(新教材)小学信息科技四年级上册期末测试卷附答案.docx
- 2025秋苏科版(新教材)小学信息科技五年级上册期末测试卷附答案(共3套).docx
- 2025秋苏科版(新教材)小学信息科技三年级上册期末测试卷附答案(三套).docx
- 2025秋苏科版(新教材)小学信息科技六年级上册期末测试卷附答案.docx
- 2025年秋苏科版(新教材)小学信息科技六年级上册期末模拟试卷(含答案)(3套).docx
- 2025-2026学年苏科版(新教材)小学信息科技三年级上册期末综合测试卷及答案.docx
- 2025-2026学年苏科版(新教材)小学信息科技五年级上册期末综合测试卷及答案.docx
- 浙江省温州市浙南名校联盟2025-2026学年高二上学期期中联考历史试题含解析.docx
- 浙江省温州市浙南名校联盟2025-2026学年高一上学期期中联考数学试题含解析.docx
- 26高考数学提分秘诀重难点34圆锥曲线中的定点、定值、定直线问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点35概率与统计的综合问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点31圆锥曲线中的切线与切点弦问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点30圆锥曲线中的弦长问题与长度和、差、商、积问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点29巧解圆锥曲线的离心率问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点28直线与圆的综合(举一反三专项训练)(全国通用)(含解析).docx
- 寡核苷酸药物重复给药毒性研究技术指南.docx
- 重组溶瘤腺病毒生产质量管理标准.docx
- 26高考数学提分秘诀重难点27直线与圆中常考的最值与范围问题(举一反三专项训练)(全国通用)(含解析).docx
最近下载
- 英语丨天一大联考安徽省2025届高三12月联考英语试卷及答案.docx VIP
- 北京师范大学《艺术概论》2023-2024学年第一学期期末试卷.doc VIP
- 人教版八年级上册英语 Units 1-5单元复习测试卷(Word版,含答案).docx VIP
- 全国新高考:历史重点基础知识点大全.doc VIP
- 2025年人工智能在地质勘探领域的应用分析及未来五到十年行业趋势报告.docx
- 法医学图鉴 _原创文档.pdf VIP
- 北京师范大学《劳动教育实践》2022-2023学年第一学期期末试卷.doc VIP
- 第3单元单元活动 学用地形图探究地貌特征课件(24张PPT).pptx VIP
- 雨污分流施工规定合同书文本(2025版).docx VIP
- 施工电梯拆除技术交底 .pdf VIP
原创力文档


文档评论(0)