iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux系统下常用的调试工具有哪些
  • 863
分享到

Linux系统下常用的调试工具有哪些

2023-06-28 11:06:25 863人浏览 独家记忆
摘要

本文将为大家详细介绍“linux系统下常用的调试工具有哪些”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“Linux系统下常用的调试工具有哪些”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下

本文将为大家详细介绍“linux系统下常用的调试工具有哪些”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“Linux系统下常用的调试工具有哪些”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。

1.print语句

这是一个基本的原始的调试问题的方法。 我们可以在程序中插入print语句来了解控制流和变量值。 虽然这是一个简单的技术, 但它有一些缺点。 程序需要进行编辑以添加’print’语句,然后必须重新编译,重新运行来获得输出。 如果要调试的程序相当大,这是一个耗时的方法。

2. 查询

在某些情况下,我们需要弄清楚在一个运行在内核中的进程的状态和内存映射。为了获得这些信息,我们不需要在内核中插入任何代码。 相反,可以用 /proc 文件系统。

/proc 是一个伪文件系统,系统一启动运行就收集着运行时系统的信息 (cpu信息, 内存容量等)。

Linux系统下常用的调试工具有哪些

‘ls /proc’的输出

正如你看到的, 系统中运行的每一个进程在/proc文件系统中有一个以进程id命名的项。每个进程的细节信息可以在进程id对应的目录下的文件中获得。

Linux系统下常用的调试工具有哪些

‘ls /proc/pid’的输出

解释/proc文件系统内的所有条目超出了本文的范围。一些有用的列举如下:

  • /proc/cmdline -> 内核命令行

  • /proc/cpuinfo -> 关于处理器的品牌,型号信息等

  • /proc/filesystems -> 文件系统的内核支持的信息

  • /proc//cmdline -> 命令行参数传递到当前进程

  • /proc//mem -> 当前进程持有的内存

  • /proc//status -> 当前进程的状态

3. 跟踪

strace的和ltrace是两个在Linux中用来追踪程序的执行细节的跟踪工具。

strace:

strace拦截和记录系统调用及其接收的信号。对于用户,它显示了系统调用、传递给它们的参数和返回值。strace的可以附着到已在运行的进程或一个新的进程。它作为一个针对开发者和系统管理员的诊断、调试工具是很有用的。它也可以用来当做一个通过跟踪不同的程序调用来了解系统的工具。这个工具的好处是不需要源代码,程序也不需要重新编译。

使用strace的基本语法是:

strace 命令

strace有各种各样的参数。可以检查看strace的手册页来获得更多的细节。

strace的输出非常长,我们通常不会对显示的每一行都感兴趣。我们可以用’-e expr’选项来过滤不想要的数据。

用 ‘-p pid’ 选项来绑到运行中的进程.

用’-o’选项,命令的输出可以被重定向到文件。

Linux系统下常用的调试工具有哪些

strace过滤成只有系统调用的输出

ltrace:

ltrace跟踪和记录一个进程的动态(运行时)库的调用及其收到的信号。它也可以跟踪一个进程所作的系统调用。它的用法是类似与strace。

ltrace command

‘-i’ 选项在调用库时打印指令指针。

‘-S’ 选项被用来现实系统调用和库调用

所有可用的选项请参阅ltrace手册。

Linux系统下常用的调试工具有哪些

ltrace捕捉’STRCMP’库调用的输出

4. Valgrind

Valgrind是一套调试和分析工具。它的一个被广泛使用的默认工具——’Memcheck’——可以拦截malloc(),new(),free()和delete()调用。换句话说,它在检测下面这些问题非常有用:

  • 内存泄露

  • 重释放

  • 访问越界

  • 使用未初始化的内存

  • 使用已经被释放的内存等。

它直接通过可执行文件运行。

Valgrind也有一些缺点,因为它增加了内存占用,会减慢你的程序。它有时会造成误报和漏报。它不能检测出静态分配的数组的访问越界问题。

为了使用它,首先请下载并安装在你的系统上。可以使用操作系统上的包管理器来安装。

使用命令行安装需要解压缩和解包下载的文件。

 tar -xjvf valgring-x.y.z.tar.bz2 (where x.y.z is the version number you are trying to install)

进入新创建的目录(的valgrind-XYZ)内运行以下命令:

 ./configure make make install

让我们通过一个小程序(test.c)来理解valgrind怎么工作的:

 #include  void f(void)  { int x = malloc(10 * sizeof(int));  x[10] = 0; }  int main() { f(); return 0; }

编译程序:

 GCc -o test -g test.c

现在我们有一个可执行文件叫做’test’。我们现在可以用valgrind来检测内存错误:

 valgrind –tool=memcheck –leak-check=yes test

这是valgrind呈现错误的输出:

Linux系统下常用的调试工具有哪些

valgrind显示堆溢出和内存泄漏的输出

正如我们在上面看到的消息,我们正在试图访问函数f未分配的内存以及分配尚未释放的内存。

5. GDB

GDB是来自自由软件基金会的调试器。它对定位和修复代码中的问题很有帮助。当被调试的程序运行时,它给用户控制权去执行各种动作, 比如:

  • 启动程序

  • 停在指定位置

  • 停在指定的条件

  • 检查所需信息

  • 改变程序中的数据 等。

你也可以将一个崩溃的程序coredump附着到GDB并分析故障的原因。

GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的选择,来感受如何开始使用GDB。

如果你还没有安装GDB,可以在这里下载:GDB官方网站。

编译程序:

为了用GDB调试程序,必须使用gcc的’-g’选项进行编译。这将以操作系统的本地格式产生调试信息,GDB利用这些信息来工作。

下面是一个简单的程序(example1.c)执行被零除用来显示GDB的用法:

 #include int divide() { int x=5, y=0; return x / y; }  int main() { divide(); }

Linux系统下常用的调试工具有哪些

展示GDB用法的例子

调用 GDB:

通过在命令行中执行’gdb’来启动gdb:

Linux系统下常用的调试工具有哪些

调用 gdb

调用后, 它将等待终端命令并执行,直到退出。

如果一个进程已经在运行,你需要将GDB连接到它上面,可以通过指定进程ID来实现。假设程序已经崩溃,要分析问题的原因,则用GDB分析core文件。

启动程序:

一旦你在GDB里面,使用’run’命令来启动程序进行调试。

给程序传参数:

使用’set args’给你的程序传参数,当程序下次运行时将获得该参数。’show args’将显示传递给程序的参数。

检查堆栈:

每当程序停止,任何人想明白的第一件事就是它为什么停止,以及怎么停在那里的。该信息被称为反向跟踪。由程序产生每个函数调用和局部变量,传递的参数,调用位置等信息一起存储在堆栈内的数据块种,被称为一帧。我们可以使用GDB来检查所有这些数据。 GDB从最底层的帧开始给这些帧编号。

  • bt: 打印整个堆栈的回溯

  • bt 打印n个帧的回溯

  • frame : 切换到指定的帧,并打印该帧

  • up : 上移’n’个帧

  • down : 下移’n’个帧 ( n默认是1)

检查数据:

程序的数据可以在里面GDB使用’print’命令进行检查。例如,如果’x’是调试程序内的变量,’print x’会打印x的值。

检查源码:

源码可以在GDB中打印。默认情况下,’list’命令会打印10行代码。

  • list : 列出’linenum’行周围的源码

  • list : 从’function’开始列出源码

  • disas : 显示该函数机器代码

停止和恢复程序:

使用GDB,我们可以在必要的地方设置断点,观察点等来停止程序。

  • break : 在’location’设置一个断点。当在程序执行到这里时断点将被击中,控制权被交给用户。

  • watch : 当’expr’被程序写入而且它的值发生变化时GDB将停止

  • catch : 当’event’发生时GDB停止

  • disable : 禁用指定断点

  • enable : 启用指定断点

  • delete : 删除 断点/观察点/捕获点。 如果没有传递参数默认操作是在所有的断点

  • step: 一步一步执行程序

  • continue: 继续执行程序,直到执行完毕

退出 GDB:

用’quit’命令还从GDB中退出。

GDB还有更多的可用选项。里面GDB使用help选项了解更多详情。

Linux系统下常用的调试工具有哪些

在GDB中获得帮助

Linux有哪些版本

Linux的版本有:Deepin、ubuntuKylin、Manjaro、LinuxMint、Ubuntu等版本。其中Deepin是国内发展最好的Linux发行版之一;UbuntuKylin是基于Ubuntu的衍生发行版;Manjaro是基于Arch的Linux发行版;LinuxMint默认的Cinnamon桌面类似windows XP简单易用;Ubuntu则是以桌面应用为主的Linux操作系统。

感谢您能读到这里,小编希望您对“Linux系统下常用的调试工具有哪些”这一关键问题有了从实践层面最深刻的体会,具体使用情况还需要大家自己动手实践使用过才能领会,如果想阅读更多相关内容的文章,欢迎关注编程网操作系统频道!

--结束END--

本文标题: Linux系统下常用的调试工具有哪些

本文链接: https://www.lsjlt.com/news/318888.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux系统下常用的调试工具有哪些
    本文将为大家详细介绍“Linux系统下常用的调试工具有哪些”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“Linux系统下常用的调试工具有哪些”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下...
    99+
    2023-06-28
  • Linux下常用系统分析工具有哪些
    这篇文章给大家分享的是有关Linux下常用系统分析工具有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.CPU对于cpu我们主要介绍top,strace,perf,vmstat。1.1 toptop命令可以...
    99+
    2023-06-16
  • Linux系统常用的BT下载工具有哪些
    这篇文章的内容主要围绕Linux系统常用的BT下载工具有哪些进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!windows系统中可以使用的P2P工具有...
    99+
    2023-06-28
  • Linux系统下常见的分区工具有哪些
    这篇“Linux系统下常见的分区工具有哪些”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“Linux系统下常见的分区工具有哪些”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所...
    99+
    2023-06-27
  • Linux下常用的工具有哪些
    这篇文章给大家分享的是有关Linux下常用的工具有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.w对,你没看错,就是 w 命令。使用该命令我们可以查看到当前登录系统的用户是谁,以及执行了哪些命令。2.nm...
    99+
    2023-06-27
  • Linux系统下git工具有哪些
    这篇文章主要为大家展示了Linux系统下git工具有哪些,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Linux系统下git工具有哪些”这篇文章吧。Git是我们目前使用最广泛的版本控制工具,一般情...
    99+
    2023-06-28
  • Linux系统常用监控工具有哪些
    这篇文章主要介绍了Linux系统常用监控工具有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。top 命令top 命令我想大家都挺熟悉吧!Linux 下的 top 命令有点...
    99+
    2023-06-16
  • Linux下常用的开发工具有哪些
    这篇文章将为大家详细讲解有关Linux下常用的开发工具有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux是一个优秀的开发环境,但是如果没有好的开发工具作为武器,这个环境给你带来的好处就会大打折...
    99+
    2023-06-28
  • Linux下常用的录屏工具有哪些
    这篇文章主要介绍了Linux下常用的录屏工具有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。录屏可以帮助用户解决一些问题,比如bug重现,或者是视频教学,比单纯的文字描述...
    99+
    2023-06-27
  • Linux下常用的网络工具有哪些
    这篇文章主要介绍Linux下常用的网络工具有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!NetstatNetstat是Linux下全能的网络监控工具,可以监控主机网络数据包统计信息以及网卡信息的命令行工具。它可...
    99+
    2023-06-27
  • Linux系统中常用的备份工具有哪些
    这篇文章主要介绍了Linux系统中常用的备份工具有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。计算机里面重要的数据,不论是对企业用户还是对个人用户,都是至关重要的,若不...
    99+
    2023-06-27
  • Linux用户空间调试工具有哪些
    这期内容当中小编将会给大家带来有关Linux用户空间调试工具有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Linux系统中使用调试工具可以帮助我们监测、控制和纠正其他程序的程序。1.print 语...
    99+
    2023-06-28
  • Linux下常见的SSH工具有哪些
    本篇内容主要讲解“Linux下常见的SSH工具有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下常见的SSH工具有哪些”吧!SSH工具SecureCRTSecureCRT支持SSH...
    99+
    2023-06-27
  • Linux下常用的pdf阅读工具有哪些
    今天小编给大家分享一下Linux下常用的pdf阅读工具有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。LibreOffi...
    99+
    2023-06-27
  • 常用的linux系统克隆迁移工具有哪些
    常用的Linux系统克隆迁移工具有以下几种:1. Clonezilla:一款功能强大的开源克隆工具,可以将整个硬盘或分区进行克隆和备...
    99+
    2023-10-07
    linux
  • Linux系统中vim工具常用命令有哪些
    Linux系统中vim工具常用命令有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用。作为一...
    99+
    2023-06-13
  • javascript的调试工具有哪些
    这篇文章主要介绍了javascript的调试工具有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript的调试工具有哪些文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-10-19
  • golang的调试工具有哪些
    golang的调试工具有:1.Delve,golang调试工具;2.GDB,Linux系统中的程序调试工具;3.debugcharts,golang可视化调试工具;golang的调试工具有以下几种DelveDelve是一个golang调试工...
    99+
    2022-10-15
  • Linux系统调试工具strace怎么用
    这篇文章主要讲解了“Linux系统调试工具strace怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统调试工具strace怎么用”吧!1、简介strace是Linux系统中...
    99+
    2023-06-28
  • Linux的常用工具有哪些
    本篇内容主要讲解“Linux的常用工具有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux的常用工具有哪些”吧!01日志工具1logdissect   &...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作