【Linux】Linux调试器——gdb使用

简介: 【Linux】Linux调试器——gdb使用

一、关于调试的背景知识

  • 程序的发布方式有两种,debug模式和release模式
    debug模式下发布的程序都是可以调试的程序,
    而release模式是正式发布版本是不可进行调试的,
    当然由于这样的差别,debug模式下的程序通常要比release版本下的程序大得多。
    在 Visual Studio 2022 看到的相关模式


  • Linux gcc/g++出来的二进制程序,默认是release模式
    要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g 选项

    简单的一个打印程序,可以看出两者的体积差别,在大型项目中这个差别会更加明显。

二、gdb的详细使用

1.简单使用

1.调试某个程序

gdb 程序名

2.退出调试:ctrl + d 或 quit (q)

2.调试命令

  • list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • break(b) 行号:在某一行设置断点 break
  • info break :查看断点信息
  • break(b) 函数名:在某个函数开头设置断点 。
    delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点
  • r或run:运行程序。
  • n 或 next:单条执行。(逐过程)
  • s或step:进入函数调用 (逐语句)
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数,
  • p 变量:打印变量值
  • breaktrace(或bt):查看各级函数调用及参数
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • set var:修改变量的值
  • info(i) locals:查看当前栈帧局部变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序 ,相当于运行到下一个断点。
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点


  • list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。

  • list/l 函数名:列出某个函数的源代码。

  • break(b) 行号:在某一行设置断点 break
  • info break :查看断点信息

  • break(b) 函数名:在某个函数开头设置断点 。

  • delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点

  • r或run:运行程序。

不设立断点,直接运行结束

  • n 或 next:单条执行。(逐过程)

  • s或step:进入函数调用 (逐语句)

  • finish:执行到当前函数返回,然后挺下来等待命令

  • print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数,
  • p 变量:打印变量值。

重新运行程序

  • breaktrace(或bt):查看各级函数调用及参数

  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪

  • until X行号:跳至X行

  • set var:修改变量的值

  • info(i) locals:查看当前栈帧局部变量的值

  • continue(或c):从当前位置开始连续而非单步执行程序 ,相当于运行到下一个断点。
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点

三、结语

gdb的使用需要多多操作练习才能掌握,掌握之后在程序的调试中用它会提高的我们的调试效率,当然gdb的功能与使用技巧还不止于此,感兴趣的同学可以继续深入学习。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
50 10
|
2月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
2月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
42 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
4月前
|
NoSQL Linux C语言
GDB:强大的GNU调试器
GDB:强大的GNU调试器
|
4月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
41 0
|
程序员 编译器 Linux
linux gdb-多线程调试
相信使用C/C++语言开发软件的程序猿们都经历过‘栈溢出’的问题。‘栈溢出’问题通常十分的隐蔽,有的时候问题复现也十分的困难。每当软件出现莫名其妙的问题时,总是有人怀疑是不是栈溢出了,但是问题的排查又十分的困难,所以,‘栈溢出’就是广大C/C++开发者的噩梦。
142 0
|
NoSQL IDE Linux
linux gdb-多线程调试
linux下应用程序的调试工具主要就是gdb,可能你已经习惯了IDE形式的调试工具。也许刚开始使用gdb作为调试工具,会有诸多的不变,但是一旦你学会了如何使用gdb你就会被其富有魔力的功能所吸引的,下面开始逐步的学习linux下gdb的使用方式。
417 0
|
1天前
|
Linux
Linux常用命令包括
Linux常用命令包括
10 5
|
1天前
|
Linux
Linux命令
Linux命令
12 5
|
5天前
|
Linux Python Perl
Linux命令删除文件里的字符串
Linux命令删除文件里的字符串
18 7
下一篇
无影云桌面