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
目录
相关文章
|
1天前
|
安全 测试技术
现代软件测试中的自动化工具与挑战
传统的软件测试方法已经无法满足日益复杂的软件开发需求,因此自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的发展现状和面临的挑战,以及如何克服这些挑战提高测试效率和质量。
8 0
|
2天前
|
Cloud Native jenkins 测试技术
软件测试中的自动化工具与挑战
在当今快速发展的软件行业中,软件测试是确保产品质量和稳定性的重要环节。随着软件规模的不断扩大和复杂度的增加,传统的手动测试已经无法满足需求。因此,自动化测试工具应运而生,能够提高测试效率、降低成本,并且减少人为错误。本文将探讨软件测试中常用的自动化工具以及在实践中所面临的挑战。
9 0
|
2天前
|
运维 监控 Linux
提升系统稳定性:Linux服务器性能监控与故障排查实践深入理解与实践:持续集成在软件测试中的应用
【5月更文挑战第27天】在互联网服务日益增长的今天,保障Linux服务器的性能和稳定性对于企业运维至关重要。本文将详细探讨Linux服务器性能监控的工具选择、故障排查流程以及优化策略,旨在帮助运维人员快速定位问题并提升系统的整体运行效率。通过实际案例分析,我们将展示如何利用系统资源监控、日志分析和性能调优等手段,有效预防和解决服务器性能瓶颈。
|
2天前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动
|
2天前
|
Web App开发 测试技术 API
自动化测试工具Selenium的深度解析
【5月更文挑战第27天】本文旨在深入剖析自动化测试工具Selenium,探讨其架构、原理及应用。通过对其核心组件、运行机制及在实际项目中的应用案例进行详细解读,以期为软件测试人员提供全面、深入的理解与实践指导。
|
3天前
|
敏捷开发 监控 IDE
深入理解自动化测试工具Selenium的工作原理与实践应用
【5月更文挑战第26天】 随着敏捷开发和持续集成理念的普及,自动化测试在软件开发生命周期中扮演了至关重要的角色。Selenium作为最流行的自动化测试工具之一,以其开源、跨平台和支持多种编程语言的特性被广泛使用。本文将详细解析Selenium的核心组件,探讨其工作原理,并通过案例分析展示如何高效地实施Selenium进行Web应用的自动化测试。我们将从测试准备到结果分析的全过程,提供一系列实用的策略和最佳实践,帮助读者构建和维护一个健壮的自动化测试环境。
|
4天前
|
测试技术 持续交付 开发者
深入探索软件测试:策略、工具与最佳实践
【5月更文挑战第25天】 在软件开发的广阔天地中,软件测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的核心策略,评估各种测试工具的优势与局限,并分享行业最佳实践。我们的目标是为读者提供一个结构化的视角,以理解如何通过有效的测试流程提升软件性能和稳定性。
|
4天前
|
存储 监控 Ubuntu
Linux系统之GoAccess实时Web日志分析工具的基本使用
【5月更文挑战第22天】Linux系统之GoAccess实时Web日志分析工具的基本使用
14 0
|
5天前
|
Linux 测试技术 开发工具
Linux系统之advcpmv工具的安装和基本使用
【5月更文挑战第21天】Linux系统之advcpmv工具的安装和基本使用
15 2
|
5天前
|
敏捷开发 IDE 测试技术
深入探索自动化测试工具Selenium的高效应用
【5月更文挑战第23天】 在快速演进的数字时代,软件开发周期不断缩短,而质量保证的需求却日益增加。自动化测试作为确保软件质量的关键手段之一,其重要性不言而喻。Selenium作为一种广泛使用的自动化测试工具,因其跨平台、多语言支持和开源等特性,在业界得到了广泛应用。本文将深入分析Selenium的核心功能,探讨其在真实项目中的应用策略,并通过案例分析展示如何通过Selenium提高测试效率和准确性。