作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

这篇具有很好参考价值的文章主要介绍了作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

gdb(GNU Debugger) 是一个用于调试 Linux 系统的软件工具。在学习 Linux 的过程中,gdb 的重要性不言而喻。以下是 gdb 在 Linux 学习者中的重要性的详细说明:

  1. 帮助理解 Linux 系统的运作方式:gdb 是一个强大的调试工具,可以帮助学习者深入了解 Linux 系统的运作方式。通过使用 gdb,学习者可以调试 Linux 内核、系统调用、文件系统等等。
  2. 提高编程技能:gdb 不仅仅是一个调试工具,还是一个开发工具。学习者可以使用 gdb 调试自己的程序,从而提高编程技能。调试程序需要对计算机系统的工作原理有深入的理解,而 gdb 可以帮助学习者做到这一点。
  3. 帮助解决故障:在使用 Linux 系统时,难免会遇到故障。gdb 可以帮助学习者快速定位和解决故障。学习者可以使用 gdb 调试系统命令、文件系统、网络连接等等,从而解决故障。
  4. 提高实践能力:gdb 是一个实践性很强的工具。学习者可以通过使用 gdb 进行调试,提高自己的实践能力。在实际应用中,掌握 gdb 是非常有用的。

安装gdb

	sudo yum install -y gdb

进入gdb调试:
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
  默认情况下,gdb无法进行对现在发布程序进行调试
  在Linux中,用g++/gcc生成可执行程序时,默认是release版本的,而release版本是发布版本无法进行调试,我们需要先将其更改为debug版本。
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

gcc:默认行为:

  • 默认是动态链接
    作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
  • 默认是release

  debug与release版本区别:debug是提供给程序员的,程序员需要经常去写代码还需要通过调试去验证代码的正确性。release版本是提供给用户的,用户不需要写代码也不需要调试,所以能够优化掉一部分功能,减少占用的内存。


调试准备

  要用gbd调试,我们首先需要将可执行程序更改为debug版本,给编译器添加-g标识:

	gcc -o mytest_g Test.c -g

作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
  我们能很清楚的发现,debug版本的可执行程序要比release版本的可执行程序占用空间更大
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
  这样我们就可以调试起来了。
  我们还可以通过下面方式判断是否是debug版本:

	readelf -S mytest_g | grep debug

作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
  debug版本是带有调试信息的


正式调试

显示代码:

list/l 行号:显示源代码,回车直接接着上次的位置往下列,每次列10行
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

打断点:

break / b + 行号:在某一行设置断点
info break / b :查看所有断点
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

删除断点:

d + breakpoint的编号(不是打断点的行号)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
删除所有断点:d breakpoint
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

开始调试:

run / r (开始调试,在断点处停下来,相当于vs的F5)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
逐过程:
next / n(相当于vs的F10)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
逐语句:
step / s (相当于vs的F11)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)
逐断点:
continue / c (运行至下一个断点)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

查看调用堆栈:breaktrace / bt
直接运行完当前所处的函数,并在函数返回后停下来:finish
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

打印变量值:p + 变量名
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

常显示变量:display + 变量名(每次停下来都会打印它的值)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

取消常显示变量:undisplay + 编号(每个常显示之前)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

跳转到指定行:until + 行号(比如我们在一个循环中,我们需要跳出循环就可以使用until 这个跳转的行号未必一定是我们until后面跟的行号,编译器会自己优化一下)
作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

其它调试指令:
list/l 函数名:列出某个函数的源代码。
break 函数名:在某个函数开头设置断点
print / p:在 GDB 调试程序的过程中,输出或者修改指定变量或者表达式的值
set var:修改变量的值
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(i) locals:查看当前栈帧局部变量的值


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀文章来源地址https://www.toymoban.com/news/detail-464823.html

到了这里,关于作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【算法】程序员必须掌握的算法?

               Yan-英杰的主页 悟已往之不谏 知来者之可追    C++程序员,2024届电子信息研究生 目录 一:程序员为什么一定要学会算法 二:常见算法介绍         1、时间复杂度         2、空间复杂度         3. 必会内容:         4.使用场景         5.  算法学

    2024年02月12日
    浏览(60)
  • 「程序员必须掌握的算法」动态规划「上篇」

    动态规划 (Dynamic Programming) 是一种算法思想,用于解决一些复杂的问题。本文将介绍动态规划的分类、概念和经典例题讲解。 动态规划可以分为以下两种类型: 0/1背包问题:该问题是动态规划的一种基本类型。在背包问题中,有n个物品可以放入容量为W的背包中,每个物品有

    2024年02月07日
    浏览(55)
  • 「程序员必须掌握的算法」字典树「上篇」

    前言: 在计算机科学中,字典树(Trie)是一种有序树,用于保存关联数组(有时我们称之为“映射”或“字典”)。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。字典树的优势在于能够非常快速地查找、插入和删除字符串。 本篇文章将介绍字

    2024年02月07日
    浏览(70)
  • 《黑马程序员2023新版黑马程序员大数据入门到实战教程,大数据开发必会的Hadoop、Hive,云平台实战项目》学习笔记总目录

    本文是对《黑马程序员新版大数据入门到实战教程》所有知识点的笔记进行总结分类。 学习视频:黑马程序员新版大数据 学习时总结的学习笔记以及思维导图会在后续更新,请敬请期待。 前言:配置三台虚拟机,为集群做准备(该篇章请到原视频进行观看,不在文章内详细

    2024年02月03日
    浏览(70)
  • 9个程序员必须掌握的Git命令

    介绍一些非常实用的Git命令。 微信搜索关注《Java学研大本营》 Git是最常用的版本控制系统之一。然而,对于初学者来说,Git的众多命令和工作流程会让人感到困惑和棘手。在Git的世界中很容易迷失,遇到合并冲突错误和意外更改,Git对于新手来说可能真的是一场噩梦。 本文

    2024年01月21日
    浏览(62)
  • 程序员必须了解的 10个免费 Devops 工具

    近年来,DevOps 已经成为一门将软件开发 (Dev) 与 IT 运维 (Ops) 相融合的重要学科,目的是为了缩短软件的开发生命周期并提供高质量软件的持续交付。 这篇文章整理了十种基本的免费开源的 DevOps 工具,这些工具已经在实践中得到了证明,凭借有效性和能够简化 DevOps 流程的能

    2024年04月11日
    浏览(76)
  • 程序员必须避免的坑:编程陷阱与最佳实践

    摘要:作为一位资深程序员,我们在编程过程中可能会遇到各种各样的陷阱。本文将详细讨论程序员在编程过程中应避免的一些常见陷阱,并提供相应的最佳实践,以帮助您提高编程效率和代码质量。 正文: 编程过程中,务必保持代码风格的一致性。这包括缩进、命名规范

    2024年02月06日
    浏览(95)
  • 学PYTHON必须学算法吗?老程序员告诉你真相!

    通过以上所学内容大家就可以比较清楚的了解到Python编程学完可以做什么了,主要可以选择的工作我挑了以下几个介绍: (1) 大数据分析师 :基于各种分析手段对大数据进行科学分析、挖掘、展现并用于决策支持。使企业清晰的了解到现状及竞争环境。 (2) 人工智能 :

    2024年02月06日
    浏览(61)
  • 程序员必会的英语单词汇总,学习速度可提高10倍,偷偷超越你身边的大聪明

    虽然说英语不好也能学编程,但学习速度却大大减慢,尤其是到后面你要查资料或者上Github等英文网站的时候,浏览器自带的翻译还会出错。 所以我专门花了几天的时间,结合自己这些年来的开发经验,把编程常用的英语单词都做了一次全面的汇总,总共700个计算机常用的单

    2023年04月20日
    浏览(50)
  • 程序员必须掌握哪些算法?——前端开发工程师需要掌握的算法

    一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。作为一名前端开发工程师,今天就通过这个话题和文章来聊聊前端开发工程师需要掌握的算法有哪些呢。 算法(Algorithm) 是指解题方案的准确而完整的

    2024年02月15日
    浏览(73)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包