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
目录
相关文章
|
12天前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
28 4
|
14天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
28天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
70 8
|
7天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
75 16
Selenium:强大的 Web 自动化测试工具
|
5天前
|
运维 监控 Linux
BPF及Linux性能调试探索初探
BPF技术从最初的网络数据包过滤发展为强大的系统性能优化工具,无需修改内核代码即可实现实时监控、动态调整和精确分析。本文深入探讨BPF在Linux性能调试中的应用,介绍bpftune和BPF-tools等工具,并通过具体案例展示其优化效果。
33 14
|
17天前
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
30 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
10天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
54 13
|
17天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
43 1
|
18天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
35 2
|
23天前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
30 4