【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
相关文章
|
3月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
59 10
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
Ubuntu Linux
内核实验(四):Qemu调试Linux内核,实现NFS挂载
本文介绍了在Qemu虚拟机中配置NFS挂载的过程,包括服务端的NFS服务器安装、配置和启动,客户端的DHCP脚本添加和开机脚本修改,以及在Qemu中挂载NFS、测试连通性和解决挂载失败的方法。
161 0
内核实验(四):Qemu调试Linux内核,实现NFS挂载
|
3月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
122 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
3月前
|
NoSQL
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
89 0
|
6月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
368 2
|
6月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
5月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
40 1
|
5月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
30 0
|
5月前
|
NoSQL Linux C++
Linux C/C++ gdb调试正在运行的程序
Linux C/C++ gdb调试正在运行的程序