Linux中随手可得的测试、调试、性能检验工具

简介:
原定标题是“linux自带的测试、调试、性能工具”,不过并不恰当,比如本文要提到的gdb,很多Linux发行版中都提供了它,但毕竟不是Linux的必要组成部分,只是对与大多数Linux用户随手可得罢了。合理组合使用这些工具可以满足更复杂的要求,并写成测试脚本,能为测试提供很大的方便。本文不涉及具体的脚本编写,也不涉及与网络相关的命令如netstat和tcpdump。
  为了方便阅读,用横线把内容进行分割,并且每个下划线下对这部分主要内容进行提示。
  对于1~6这几个命令,单独使用时看上去很简单,但当它们结合重定向和正则表达式从而构成更复杂的功能甚至是自动化脚本时,才能发挥其真正威力。

   cmp和diff可以用于版本控制,比较两个版本文件的不同之处,也可以用于比较程序产生的输出。
 
1.cmp
  逐字节比较两个文件,输出。无选项则输出第一个不同的地方。
  常用选项:
  -l 输出所有不同的字节,并显示 字节数(十进制)和每个不同的不同字节(八进制)。例如,如果第3个字节file1.txt中是八进制151,flie2.txt中是12,则 显示:

    3 151  12

 

2.diff

  逐行比较两个文件;如果指定的是目录,则比较目录下的同名文件。

  输出为:文件1中的行数+格式提示+文件2中的行数,其中格式提示为a、c、d,对应add、change、delete。

  diff的退出值有特定含义, 0 表示没有不同,1 表示找到不同处,2 表示出错。

  常用选项:

    -y --side-by-side 以两列输出。这时用 |标注二者不同的行,<标注后者比前者少一行,>标注前者比后者少一行。此时还可以加上下面的选项:
-W NUM --width=NUM 输出最多打印 NUM (默认 130) 列。
--left-column 仅输出共有行的左侧列。

    -c  -C NUM  --context[=NUM]  输出 NUM (默认 3) 行复制的上下文。两个文件的全文都会显示。

    -u  -U NUM  --unified[=NUM]  输出 NUM (默认 3) 行合并的上下文。两个文件相同的部分只显示一次。

    -ruN 生成patch文件,格式为diff -ruN file1 file2 >patch.dat,这时使用patch file1 patch.dat就能把file1的内容更新到与file2一致了。

 


  sort、sum、wc同样可以对文件和输出按需要进行处理。对于能够把stdin重定向到文件中的Linux来说,对输出的处理和对文件的处理是一样的。

3.sort

  按字母序输出各行。这个命令可以同时处理多个文件。

  常用选项:

    -u 去除重复行

    -r  降序输出

    -n 按数字序排序,(这样2才不会排到10后面)

    -t    按某个分隔符分隔,这时可以用-k指定列数

 

4.sum

  计算文件校验和以及占用的块(block)数。校验和算法和block的大小可以根据选项设定。

 

5.wc

  输出文件的行数、字(word)数、字节数。如果多于一个文件还将输出总行数。

  常用选项:

    -c   输出字节数

    -m  输出字符数

    -l  输出行数

    -w  输出字(word)数

 


6.grep

  从文本中搜索符合正则表达式的内容并显示。这里就不提正则表达式是多么的强大了,其规则可以单独写成一篇博文,并且很多人已经这么做过了。下面是一些用法启发,看完之后会让人觉得,原来这个“搜索”的需求的具体化如此多样。例子出于《程序设计实践》:

  哪些文件里用到了类Regexp?  %grep Regexp *.java

  这个类的实现在哪个文件?     %grep 'class.*Regexp' *.java

  文件中有多少空行?        %grep '.' *.c++ |wc

 


   运行时间的统计和测定:time和gprof

7.time
  用法是$time 可执行文件/命令
  显示程序运行的 总时间、 用户时间和 系统时间。
  对于一个执行时间很短的程序,运行时间可能显示为0。
  因为并不是由程序执行本身收集的,如果time命令被停止或被换出内存,显示的时间可能大于真实的时间。
 
8.gprof
  统计程序运行时各个函数的运行时间和被调用的次数。这对代码调优很有帮助,通过这个统计,可以找到占用时间比率大、调用次数多的函数,对齐进行优化,这样可以提升程序的性能。而对于较少执行而且占用时间不多的函数,即使存在优化的可能性,也不必费心考虑优化方案,因为对它的优化对性能提升不大。
如果需要gprof,在gcc时需要增加-pg选项,这时会生成一个gmon.out文件。
 

代码查错:gcc -Wall选项、lint
9.gcc -Wall
  之所以把这个gcc选项也列上,主要是其作用容易被人忽略。Writing Solid Code上援引Peter Lynch——据说是80年代最好的合股投资公司管理者——的话:投资者与赌徒之间的区别在于投资者利用每一次机会,无论它是多么小,去争取利益;而赌徒则只靠运气。作者建议把这句话应用于编程,选择编译程序的所有可选警告选项,并视之为无风险高偿还的程序投资。不要问“应该使用这一警告设施吗?”而是问:“为什么不使用这一警告设施呢?”把所有警告选项都打开,除非有极好的理由才不这么做。
 
10.lint
  最初lint用于检查C语言中不可移植的代码,而现在已经不只是一个可移植性检查程序,还可以检查出代码中那些虽然可移植并且完全合乎语法但很有可能是错误的特性。
  lint有很多版本,Linux下可以使用splint,通过apt-get安装。
 
 

   较综合的调试:gdb
11.gdb
  gdb是一个较为综合的调试工具,提供了诸如断点、变量监测和设置、信号、查看函数堆栈、单步执行等功能,这里不做详细介绍,相关的博文很多,可以进行参考,我以前也做了个记录: gdb调试命令
 

其他:strace
12.strace
   strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。这条命令我之前没有用过,下面贴一个地址供需要的人进一步研究:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html




本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2013/06/13/3119163.html,如需转载请自行联系原作者

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
6天前
|
设计模式 测试技术 持续交付
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第20天】 在软件开发的复杂世界中,确保产品的质量和性能始终是至关重要的任务。白盒测试,作为软件测试领域的重要分支,提供了对程序内部结构和逻辑的深入分析手段。本文将探讨如何通过有效的白盒测试策略来优化软件性能,减少缺陷,并最终提高用户满意度。通过剖析代码检查、单元测试、集成测试等白盒测试技术,我们将了解这些方法如何揭示潜在的问题点,并为改进提供方向。
|
16天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
26 0
|
1月前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
43 1
|
1月前
|
测试技术
现代软件测试中的自动化工具与挑战
传统软件测试面临着越来越复杂的系统架构和不断增长的测试需求,自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的应用和挑战,深入分析其优势与局限性,为软件测试领域的发展提供思路和启示。
|
1月前
|
jenkins 测试技术 持续交付
现代软件测试中的自动化工具与挑战
随着软件开发领域的不断发展,自动化测试工具在测试过程中扮演着越来越重要的角色。本文将探讨现代软件测试中自动化工具的应用及面临的挑战,旨在帮助开发人员和测试人员更好地理解和应对自动化测试中的问题。
|
2天前
|
监控 NoSQL 测试技术
MongoDB性能最佳实践:如何制定更有效的基准测试?
感谢你与我们一起走过这段MongoDB性能最佳实践之旅,希望你能从中获取一些有用的信息
1562 2
|
2天前
|
API 开发者
免费邮箱API发送邮件测试调试的方法和步骤
本文介绍了使用免费邮箱API如aoksend、Mailgun、SMTP2GO发送邮件的测试调试步骤:选择合适的API,获取访问密钥,配置邮件参数,编写测试代码,调试和测试,查看发送日志,以及优化改进邮件发送功能,确保其稳定运行。
|
3天前
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
35 1
|
16天前
|
测试技术 Linux Apache
网站压力测试工具webbench图文详解
网站压力测试工具webbench图文详解
12 0
|
19天前
|
安全 测试技术
深入理解白盒测试:方法、工具与实践
【4月更文挑战第7天】 在软件开发的质量控制过程中,白盒测试是确保代码逻辑正确性的关键步骤。不同于黑盒测试关注于功能和系统的外部行为,白盒测试深入到程序内部,检验程序结构和内部逻辑的正确性。本文将探讨白盒测试的核心技术,包括控制流测试、数据流测试以及静态分析等方法,同时介绍当前流行的白盒测试工具,并讨论如何在实际项目中有效实施白盒测试。文章的目标是为软件测试工程师提供一份综合性指南,帮助他们更好地理解和应用白盒测试技术。