作为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日
    浏览(44)
  • 「程序员必须掌握的算法」字典树「上篇」

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2023年04月20日
    浏览(33)
  • Visual Studio 2022 程序员必须知道高效调试手段与技巧(中)

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,上一章给大家介绍了 Visual Studio 2022 快捷键和 版本介绍,今天就来给大家来点干货    ⛳️ 今天来正式来调试环节,带大

    2024年02月15日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包