linux on power 调试工具与技术.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux on power 调试工具与技术

linux on power 调试工具和技术 https:///developerworks/cn/linux/l-pow-debug/ Linux on Power上的调试工具和技术 文档选项 未显示需要JavaScript的文档选项 级别:中级 2005年8月29日 调试是一项主要的软件开发活动,作为应用程序开发人员,您无法避免对程序进行调试。有效的调试不仅能缩短软件开发周期,而且可以节省成本。本文简要介绍了在用户空间的C/C++和Java?应用程序中查找bug的技术,并介绍了一些可以在Linux?for POWER?架构上使用的调试技术。调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者只需仔细考虑程序如何运行,并对问题进行有根有据的猜测。 在修复bug之前,首先要确定在源程序中的位置。例如,当一个程序产生崩溃或生成核心转储(core dump)时,您就需要了解是哪行代码发生了崩溃。在找到有问题的代码行之后,就可以确定这个函数中变量的值,函数是如何调用的,更具体点说,为什么会发生这种错误。使用调试器查找这些信息非常简单。 本文将简要介绍几种用于修复一些很难通过可视化地检查代码而发现的bug的技术,并阐述了如何使用在Linux on Power架构上可用的工具。 动态内存分配看起来似乎非常简单:您可以根据需要分配内存--使用malloc()或其变种--并在不需要时释放这些内存。实际上,内存管理的问题是软件中最为常见的bug,因为通常在程序启动时这些问题并不明显。例如,程序中的内存泄漏可能开始并不为人注意,直到经过多天甚至几个月的运行才会被发现。接下来的几节将简要介绍如何使用流行的调试器Valgrind来发现并调试这些最常见的内存bug。 在开始使用任何调试工具之前,请考虑这个工具是否对重新编译应用程序有益,是否可以支持具有调试信息的库(-g选项)。如果没有启用调试信息,调试工具可以做的最好的事情也不过是猜测一段特定的代码是属于哪个函数的。这使得错误消息和概要分析输出几乎没有什么用处。使用-g选项,您就有可能获得一些信息来直接指出相关的代码行。 Valgrind已经在Linux应用程序开发社区中广泛用来调试应用程序。它尤其擅长发现内存管理的问题。它可以检查程序运行时的内存泄漏问题。这个工具目前正由Julian Seward进行开发,并由Paul Mackerras移植到了Power架构上。 要安装Valgrind,请从Valgrind的Web站点上下载源代码(参阅)。切换到Valgrind目录,并执行下面的命令: #make #make check #make install Valgrind的输出格式如下: #valgrind du– x– s . . ==29404==Address 0x1189AD84 is 0bytes after ablock 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 0xmain(in/usr/bin/du) ==29404==是进程的ID。消息Address 0x1189AD84 is 0bytes after ablock of size 12 allocd说明在这个12字节的数组后面没有存储空间了。第二行以及后续几行说明内存是在130行(vg_replace_malloc.c)的strdup()程序中进行分配的。strdup()是在libc.so.6库的setlocale()中调用的;main()调用了setlocale()。 最为常见的一个bug是程序使用了未初始化的内存。未初始化的数据可能来源于: 未经初始化的变量malloc函数所分配的数据,在写入值之前使用了下面这个例子使用了一个未初始化的数组: 2{ 3 int i[5]; 4 5if(i[0]==0) 6 i[1]=1; 7 return 0; 8} 在这个例子中,整数数组i[5]没有进行初始化;因此,i[0]包含的是一个随机数。因此使用i[0]的值来判断一个条件分支就会导致不可预期的问题。Valgrind可以很容易捕获这种错误条件。当您使用Valgrind运行这个程序时,就会接收到下面的消息: #gcc– g– otest1 test1.c #valgrind./test1 . . ==31363== ==31363==Conditional jump or move

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档