Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)

这篇具有很好参考价值的文章主要介绍了Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

在上一篇文章中介绍了Linux中的编辑器vim与编译器gcc与g++:
戳我看vim与gcc详解哦

在本篇文章中将继续来介绍Linux中的工具:调试器gdb与项目自动化构建工具make/Makefile

调试器gdb

介绍

在Windows环境中,我们使用vs时,常常会逐过程与逐语句地调试代码以更高效地寻找到错误的位置。在Linux中也有其调试器,即gdb

前面我们应该知道,程序的发布版本有两种,即调试版本Debug与发布版本Release。Debug版本中包含有调试信息,所以可以支持调试;而Release版本中不包含调试信息,同时还进行了一些优化。
在vs中我们可以调整发布版本:
Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make
在Linux中默认的发布版本为Release版本,无法直接进行调试,需要以Debug版本发布才可以:
使用 gcc 原文件 -o 可执行文件 -g 就可以实现按照Dubeg版本发布
Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make
显然,Release版本比ebug版本多占一些空间,即调试信息所占的空间。

常用指令

为方便展示,使用vim编辑一段代码:
Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  1. gdb 可执行程序名进入调试环境
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  2. list/l 行号:从某行开始显示源代码,不加行号默认从第一行开始显示,连续l接着上次的位置往下列(可以直接回车默认输入上次的指令),每次列10行:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  3. list/l 函数名:列出某个函数的源代码,其实就是从某个函数开始显示10行代码,也可以继续向下显示:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  4. r/run:运行程序,就相当于我们vs环境中调试时的f5,从头开始执行程序,遇到断点会停止运行:
    continue / c:从当前位置开始连续执行程序,遇到断点会停止运行
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  5. break/b 行号:在某一行设置断点
    设置断点后,再r运行程序时就会在断点处停下:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  6. break/b 函数名:在某个函数开头设置断点
    设置后断点的行数为函数的第一行代码:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  7. info/i break/b :查看断点信息
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  8. delete breakpoints n / d n:删除序号为n的断点
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  9. delete breakpoints / d:删除所有断点
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  10. disable breakpoints:禁用断点
    断点在禁用后,断点会继续保留,但是在运行时并不会在该断点处停止:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  11. enable breakpoints:启用断点
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  12. n / next:逐过程执行
    相当于vs环境中的f10,即不进入函数,逐过程执行。在执行时会显示当前执行的语句,返回值:
    (在使用逐过程逐语句执行时,首先需要r运行起来,从断点处开始执行)
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  13. s / step:逐语句执行
    相当于vs环境中的f11,即进入函数,逐语句执行。在执行时会显示当前执行的语句,返回值:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  14. finish:执行到当前函数返回,然后停下来等待命令
    有时候在进入函数后,其中的代码过于繁琐,这时再逐过程的执行到结束就会很麻烦,所以finish就可以直接执行到函数结束:
    假设存在一函数func
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make
    在进入这个函数后就可以finish到函数结束:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  15. p 变量名:打印变量值
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  16. set var 变量名 = val:修改变量的值
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值
    跟踪显示变量时,也是有序号的。
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  18. undisplay 序号:取消对变量的跟踪显示
    通过序号取消跟踪:
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  19. until X行号:运行至X行
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

  20. quit/ q:退出gdb
    Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

自动化构建工具make/Makefile

介绍

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作;
makefile带来的好处就是自动化编译,我们写好之后,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,能够解释makefile中指令。一般来说,大多数的IDE(集成开发环境)都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

在使用make命令后,会在当前工作目录下寻找makefile文件并进行自动的解释构建

使用

依赖关系与依赖方法

我们在通过原文件生成目标文件时,目标文件需要依赖原文件在可以产生,没有原文件就没有目标文件,这就是依赖关系;而如何通过原文件生成目标文件的方法即依赖方法

例如我们有头文件test.h与源文件test.c,要生成一个可执行文件test其中test依赖test.htest.c就是依赖关系,gcc test.h test.c -o test 就是对应的依赖方法

编辑Makefile

寻找逻辑

  1. make在当前工作目录下找到makefile / Makefile文件后 ,会找到其开始的第一个文件为目标文件
  2. 如果目标文件不存在,或是其所依赖原文件的文件修改时间要比目标文件新,就会执行后面所定义的命令(依赖方法)来生成目标文件;
  3. 如果目标文件所依赖的原文件不存在,那么make会在Makefile中继续寻找目标为该原文件的依赖关系与依赖方法,以生成该文件;
  4. make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件
  5. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错。

所以在编辑Makefile时,首先就要写出目标文件及其依赖文件

test: test.c test.h

然后在其下一行写出其依赖方法,需要注意的是,依赖方法前的空格必须为Tab,否则会报错:
(在书写时,简便起见,所有目标文件可以用 $@ 表示,所有依赖文件可以用 $^表示)

	gcc -o $@ $^ -std=c99

Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

到现在,我们的Makefile就可以简单进行使用了(这里有一个简单的for循环来测试):
Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

伪目标

make在使用时,当目标文件已经存在,且其最新修改时间比其依赖文件晚的话,连续make是不会生成多个目标文件的
Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make
伪目标是可以总是被执行的,即任何时候想要执行都是可以的,.PHNOY修饰

生成的工程是需要被清理的,但是清理操作显然不能因为该目标文件已存在就不执行。所以clean这样的目标文件就可以被声明成伪目标(clean这个目标文件不需要依赖文件,只需要借助它来执行其下的删除指令即可):

.PHNOY: clean    //声明伪目标文件
clean:           //依赖关系(无依赖文件)
      rm -f test //依赖方法

Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make
有了伪目标后,就可以随时清理程序了。需要make clean命令
Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile),Linux,linux,gdb,make

总结

到此,关于Linux工具的基本知识就全部介绍完了

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦文章来源地址https://www.toymoban.com/news/detail-662760.html

到了这里,关于Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux开发工具之调试器gdb

    程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项   所以一份代码若要被调试必须是debug模式,但是在linux下我们编译代码的时候默认为release模式,要想让我们的代码

    2024年02月07日
    浏览(46)
  • [linux开发工具]小程序--进度条、调试器 - gdb

    📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 第一种情况 执行结果如下: 可以看到程序先执行printf再执行sleep 第二种情况 执行结果如下: 在这里

    2024年02月22日
    浏览(44)
  • Linux之基础开发工具gdb调试器的使用(三)

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 yum install -y gdb 程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试 要使用gd

    2024年02月05日
    浏览(50)
  • Linux——gdb调试器

    目录    前言: 二.gdb定义及指令: 如何查看该exe文件是否为Debug版本?两种方法: 三.gdb调试:         调试指令1:l指令(小写L) run指令:运行程序,相当于VS中的直接运行不调试——可简化输入r  break指令:设置断点——指令可简化输入为b ​编辑  info b指令:查看整个代码

    2024年02月07日
    浏览(37)
  • Linux--调试器:gdb

    gcc与g++默认动态链接形成的可执行程序(比如a.out)是 release 版本,不可调试!!! 如何搞成debug可调试版本? 查看可执行程序存储了哪些内存空间:   调试语法:

    2024年02月13日
    浏览(51)
  • Linux调试器gdb

    本文已收录至《 Linux知识与编程 》专栏! 作者: ARMCSKGT 演示环境: CentOS 7     ​ 目录 前言 正文 下载gdb 生成可调式文件 进入gdb gdb常用指令 查看代码 l  运行程序 r  断点设置 b  显示信息 info  查看断点 info b  删除断点 d  禁用断点 disable breakpoints  启用断点 enable brea

    2024年02月14日
    浏览(53)
  • Linux - 还不懂 gdb 调试器?(调试软件)

    当前,我们可以使用 make/makefile 来程序化执行代码文件;可以使用 gcc/g++ 等编译器来编译代码;可以使用 vim 编辑器来编写代码;其实在 Linux 当中还有一个工具,可以实现调试工作,这个工具就是 -- gdb。 在了解调试器之前,你应该对代码的发布版本做一些了解: 我们在 VS

    2024年02月07日
    浏览(54)
  • Linux调试器之gdb

    我们前面介绍了几个基本的环境开发工具。例如通过yum我们可以安装和卸载软件、通过vim我们可以写代码、通过gcc和g++我们可以编译代码成可执行程序。但是如何在Linux下调试代码呢?我们并未介绍,本期我们将来介绍最后一个工具 --- 调试器gdb。 程序的发布方式 gdb基本的调

    2024年04月16日
    浏览(67)
  • [Linux] Linux代码调试器 -- gdb

    1、程序的发布方式有两种,debug模式和release模式 2、Linux gcc/g++出来的二进制程序,默认是release模式 3、要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 我们先来写一段C语言代码: 这里我们正常再编写一个Makefile文件,用于自动化构建,我们要还是正常的编

    2024年02月05日
    浏览(43)
  • 【Linux】Linux调试器-gdb使用

    程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 退出:  调试命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某

    2024年02月21日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包