【Linux】GDB调试

简介: 【Linux】GDB调试

GDB调试

GDB是GUN发布的一个强大的程序调试工具,也是Linux程序员不可或缺的一大利器。

安装GDB

注意安装你所需要的版本。

  1. wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz
  2. tar -zxvf gdb-8.1.1.tar.gz
  3. cd gdb-8.1.1
  4. ./configure
  5. make
  6. make install

启动GDB

使用GDB的前提
gcc -g hello.c -o hello
启动GDB调试
gdb hello
GDB和Shell一样支持命令补全。

获取帮助命令

GDB将命令分为12个大类,使用命令 "help 子类别",可以查看每个类下面的详细帮助。
help breakpoints

设置断点

  • break
break命令用于设置断点,命令行接受行号或者函数名作为参数。

例1:设置以函数test()为断点,执行到调用这个函数的时候程序暂停。

break test()

例2:设置第二行为断点

break 2

查看断点

  • info
info break

删除断点

  • delete
delete + 断点编号
delete 2
  • clear
clear 删除指定位置的所有断点

例:删除函数test附近的所有断点

clear test

运行程序和单步执行

  • run
设置完断点后 执行 run 命令,运行程序。
run
程序中断后,等待用户发出下一步命令的操作。

  • next命令
next命令单步执行程序,缩写为n。也可指定执行行数。

例1

n

例2:

n 3
  • continue
continue命令继续执行,直到遇到下一个断点。缩写为c。
c
  • step
或者继续使用单步执行next,再或是使用step,缩写s。

next与step的最大区别是,step遇到函数是会进入到函数内部的,而next不会(而是当做一条语句)。

next逐过程,step逐语句。

s

监视变量

  • print
调试程序最基本的需求就是监视变量的值,可以使用print命令,缩写为p,显示指定变量的值。
print count
  • watch
为了更方便的监视某一变量,使用watch,来时刻监视某一变量或表达式,只要它发生了变化,就会停下来。并给出提示。
watch  count

image-20220712115212523


临时修改变量

  • set var
某些情况我们需要让程序进入一些特殊的流程,例如进入了一个循环,我们可以修改控制循环变量的值,来跳转到指定的循环次数。

gdb允许用户在程序运行时改变变量的值,通过set var命令来实现。

set var count = 4

查看堆栈情况

  • bt
每次调用一个函数,函数的地址、参数、以及内部变量都会被压入栈中,运行时的堆栈信息对于程序员非常重要,使用"bt"命令可以看到当前运行时栈的情况。
bt

退出GDB

  • quit
调试完毕后,使用quit命令,缩写为q,退出gdb程序。
q
相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
1月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
53 2
|
1月前
|
NoSQL Linux 开发工具
【Linux】环境基础开发工具的使用之gdb详解(三)
【Linux】环境基础开发工具的使用之gdb详解(三)
|
29天前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
68 0
|
2天前
|
Linux Android开发
Linux(6)CH9434 SPI调试笔记
Linux(6)CH9434 SPI调试笔记
12 0
|
2天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
17 0
|
22天前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
13 1
|
30天前
|
缓存 Linux iOS开发
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
65 1
|
1月前
|
NoSQL 算法 Shell
【C/C++ 调试 GDB指南 】详解 gdb 断点的设置方式
【C/C++ 调试 GDB指南 】详解 gdb 断点的设置方式
19 2
|
NoSQL Linux 编译器
【Linux】——调试器-gdb的使用
【Linux】——调试器-gdb的使用
|
1月前
|
NoSQL Linux 编译器
『Linux升级路』基础开发工具——gdb篇
『Linux升级路』基础开发工具——gdb篇