免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 908 | 回复: 0
打印 上一主题 下一主题

linux 调试工具总结 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-10 11:48 |只看该作者 |倒序浏览

                linux 调试工具总结

“工欲善其事 必先利其器”现在将一些常见的调试工具进行一下总结.

【1】
名称:MEMWATCH
功能:
    1、MEMWATCH 支持 ANSI C
    2、它提供结果日志纪录
    3、能检测双重释放(double-free)
    4、错误释放(erroneous free)
    5、没有释放的内存(unfreed memory)、
    6、溢出和下溢等等。
参考文献:
      【1】:
[color="#0000ff"]http://blog.csdn.net/lengxingfei/archive/2006/08/09/1040800.aspx
【2】
名称:YAMD
功能:
    1、查找 c 和 c++ 中动态的、与内存分配有关的问题
参考文献:
     【1】
[color="#0000ff"]http://www.cs.hmc.edu/~nate/yamd/
     【2】
[color="#0000ff"]http://www.ppsql.com/server/p262/J26232224_2.shtml

【3】
名称:electric fence
功能:
    1、检测内存泄露
    2、检查数据越界
    3、分配受保护的内存
参考文献:
    【1】
[color="#0000ff"]http://book.opensourceproject.org.cn/embedded/oreillybuildembed/index.html?page=opensource/belinuxsys-chp-11-sect-4.html
    【2】
[color="#0000ff"]http://book.opensourceproject.org.cn/embedded/oreillybuildembed/opensource/belinuxsys-chp-11-sect-4.html
    【3】
[color="#0000ff"]http://www.ppsql.com/server/p262/J26232224_3.shtml

【4】
名称:strace
功能:
    1、显示用户空间程序发出的系统调用
    2、显示调用的参数和返回值

【5】
名称:gdb
功能:
    1、启动程序
    2、使程序能够停止在指定文件的指定位置
    3、查看程序变量值
    4、改变程序执行期间的相关变量、路径等


【6】
名称:Oops
功能: 显示系统错误信息
参考文献:
    【1】
[color="#0000ff"]http://www.ibm.com/developerworks/cn/linux/sdk/l-debug/


【7】
名称:mtrace
功能:
    1、检测一些内存分配和泄漏的失败等
参考文献:
    【1】
[color="#0000ff"]http://www.vbaccelerator.com/home/VB/Code/Techniques/RunTime_Debug_Tracing/mTrace_bas.asp
    【2】
[color="#0000ff"]http://www.yuanma.org/data/2006/0612/article_789.htm
    【3】
[color="#0000ff"]http://www.mylinux.com.cn/HTML/1183705958487.html


【8】
名称:binutil
说明:binutil为一个工具集合,包含如下的工具。
     addr2line  把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。
     ar   建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。
    as   主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。
    c++filt  连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。
    gprof   显示程序调用段的各种数据。
    ld   是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。
    nm   列出目标文件中的符号。
    objcopy 把一种目标文件中的内容复制到另一种类型的目标文件中.
    objdump  显示一个或者更多目标文件的信息。显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。
    ranlib  产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。
    readelf  显示ebf格式可执行文件的信息。
    size   列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。
   
strings  打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始
化和可加载段中的可打印字符;对于其它类型的文件   它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。
    strip   丢弃目标文件中的全部或者特定符号。
    libiberty  包含许多GNU程序都会用到的函数,这些程序有: getopt, obstack, strerror, strtol 和 strtoul.
   libbfd  二进制文件描述库.
   libopcodes  用来处理opcodes的库, 在生成一些应用程序的时候也会用到它, 比如objdump.Opcodes是文本格式可读的处理器操作指令.
功能:程序调试、归档等
参考文献:
      
[color="#0000ff"]http://man.chinaunix.net/linux/


【9】
名称: Purify
功能:内存检查工具
参考文献:
     
[color="#0000ff"]http://blog.csdn.net/haoel/archive/2003/12/16/2904.aspx


【10】
名称:pc-lint
功能:C/C++的静态代码检测工具
参考文献:
      【1】
[color="#0000ff"]http://dev.yesky.com/134/2593634.shtml


【11】
名称:splint
说明:splint是一个动态检查C语言程序安全弱点和编写错误的程序
功能:
    1、空引用错误
    2、未定义的变量错误
    3、类型错误
    4、内存检查
参考文献:
    【1】
[color="#0000ff"]http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=splint&DokuWiki=e3b300af2d101a8bec5a4c805e678823
    【2】
[color="#0000ff"]http://www.splint.org/

【12】
名称:boundercheck
功能:检查内存泄露

【13】
名称:valgrind
功能:
    1、检查内存错误
参考文献:
   
[color="#0000ff"]http://blog.donews.com/idlecat511/archive/2006/02/21/736877.aspx
啥是valgrind    Valgrind是帮助程序员寻找程序里的bug和改进程序性能的工具。程序通过valgrind运行时,valgrind收集各种有用的信息,通过这些信息可以找到程序中潜在的bug和性能瓶颈。
    Valgrind现在提供多个工具,其中最重要的是Memcheck,Cachegrind,Massif和Callgrind。
Memcheck:   
这个工具可以用来寻找c、c++和fortran程序中内存管理的错误。写c或c++程序时,很多隐藏很深的bug是内存操作上出了问题。而这些在
Memcheck面前都无处遁形(偶当年用的就是这个功能)。Memcheck可以检查出下列几种内存操作上的错误(大家自查一下有没有犯过;):
  • 读写已经释放的内存
  • 读写内存块越界(从前或者从后)
  • 使用还未初始化的变量
  • 将无意义的参数传递给系统调用
  • 内存泄漏
  • (笔者补充一条,同一个malloc的内存块释放多次。当年这么个bug让我找翻天)        
Cachegrind:   
这个工具可以提供详尽的profiling信息。它不光对指令、内存访问进行计数,更能针对每条指令、每行源代码、每个函数和每个程序统计cache的不
命中次数。大家应该知道,cache对目前系统的性能有决定性的影响。因此这些信息可以指导程序员调整代码,最大限度的提高程序性能。
    访谈中提到,valgrind自身利用该工具在过去几个月内使性能提高了25%-30%。据早先报道,kde的开发team也对valgrind在提高kde性能方面的帮助表示感谢。
Massif:
    Massif对内存的分配和释放做profile。程序开发者通过它可以深入了解程序的内存使用行为,从而对内存使用进行优化。这个功能对C++尤其有用(因为C++有很多隐藏的内存分配和释放)。
Callgrind:    Callgrind是一个复杂的工具(复杂到笔者没看太明白有关它的介绍)。它基于Cachegrind,除了具有Cachegrind的功能外,还可以统计调用带来的开销。
用法:    Valgrind使用起来非常简单,你甚至不需要重新编译你的程序就可以用它。当然如果要达到最好的效果,获得最准确的信息,还是需要按要求重新编译一下的。比如在使用memcheck的时候,最好关闭优化选项。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/46715/showart_1712132.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP