一步步教你使用GDB调试程序:从入门到精通的全面指南

一步步教你使用GDB调试程序:从入门到精通的全面指南

文章目录

Step1:安装GDB1.1、包管理器安装1.2、下载源码编译安装

Step2:编译程序时添加调试信息Step3:GDB启动、退出、查看代码Step4:GDB断点操作Step5:GDB调试操作5.1 单步调试5.2 多进程调试

调试是软件开发中非常重要的一环,它可以帮助我们找到程序中的错误并修复它们。在Linux系统中,GDB是一个非常流行的调试工具,几乎每个开发者都会使用它来调试程序。本文将详细介绍如何使用GDB调试程序,如果你觉得内容对你有帮助,那么请不要忘记点赞和收藏,这将对我产生巨大的鼓励。让我们一起开始这段学习之旅吧!

Step1:安装GDB

1.1、包管理器安装

在Linux系统中,可以使用包管理器来安装GDB。例如,在Ubuntu系统中,可以使用以下命令来安装GDB:

sudo apt-get install gdb

1.2、下载源码编译安装

# 1. 打开终端,使用以下命令下载GDB源码压缩包到当前目录

wget http://ftp.gnu.org/gnu/gdb/gdb-9.2.tar.gz 或者 wget https://ftp.gnu.org/gnu/gdb/gdb-12.1.tar.xz

# 2. 解压GDB源码压缩包到当前目录

tar -zxvf gdb-12.1.tar.xz

# 3. 进入GDB源码目录

cd gdb-12.1

# 4. 运行以下命令来配置GDB:这将在`/usr/local/gdb`目录下安装GDB,并启用系统读取行模式和禁用Guile语言

./configure --prefix=/usr/local/gdb --with-system-readline --without-guile

# 5. 运行以下命令来编译GDB源代码并生成可执行文件

make

# 6. 运行以下命令来安装GDB到系统中,并将其添加到系统路径中

sudo make install

# 验证GDB是否成功安装:如果GDB成功安装,将输出GDB的版本信息

gdb --version

Step2:编译程序时添加调试信息

在编译程序时,需要使用-g选项来添加调试信息。例如,如果要编译名为test.c的程序,可以使用以下命令:

gcc -g -Wall test.c -o test

-g 的作用:在可执行文件中添加源代码信息,比如可执行文件第几条对应源码第几行 -Wall 的作用: 在不影响程序行为的情况下打开所有warning,发现更多的问题,避免不必要的BUG

这将生成一个带有调试信息的可执行文件test。

Step3:GDB启动、退出、查看代码

# 启动GDB并加载可执行文件

gdb test

# 退出

quit

# GDB使用帮助

help

# 给程序设置参数/获取设置参数

set args 10 20

show args

# 查看当前文件代码

1ist/1 (从默认位置显示)

1ist/1 行号 (从指定的行显示)

list/1 函数名(从指定的函数显示)

# 查看非当前文件代码

list/1 文件名:行号

list/1 文件名:函数名

# 设置显示的行数

show list/listsize

set list/listsize 行数

Step4:GDB断点操作

# 设置断点,b或者break

b/break 行号

b/break 函数名

b/break 文件名:行号

b/break 文件名:函数

# 查看断点,删除断点

i/info b/break

d/del/delete 断点编号

# 设置断点无效和生效

dis/disable 断点编号

ena/enable 断点编号

# 设置条件断点(一般用在循环的位置)

b/break 10 if i==5

# 要查看当前作用域内的变量值,可以使用`print`命令。例如,要查看变量`x`的值,可以输入以下命令:

print x

Step5:GDB调试操作

5.1 单步调试

在GDB中,可以使用以下命令来单步执行程序:

# 运行gdB程序

start(程序停在第一行)

run(遇到断点才停)

# 继续运行,到下一个断点停

c/continue

# 向下执行一行代码(不会进入函数体)

n/next

# 向下单步调试(遇到函数进入函数体)

s/step

finish(跳出函数体)

# 变量操作

p/print变量名(打印变量值)

ptype 变量名(打印变量类型)

# 自动变量操作

display num(自动打印指定变量的值)

i/info display

undisplay 编号

# 其它操作

setvar变量名=变量值

until(跳出循环)

要查看当前的调用栈,可以使用backtrace命令。例如,要查看当前调用栈的详细信息,可以输入以下命令: backtrace

5.2 多进程调试

使用GDB调试的时候,GDB默认只能跟踪一个进程,可以在fork函数调用之前,通过指令设置GDB调试工具跟踪父进程或者是跟踪子进程,默认跟踪父进程。

# 设置调试父进程或者子进程

set follow-fork-mode [parent(默认)| child]

# 设置调试模式,默认为on,表示调试当前进程的时候其它的进程继续运行,如果为off,调试当前进程的时候其它进程被GDB挂起。

set detach-on-fork [on | off]

# 查看调试的进程

info inferiors

# 切换当前调试的进程

inferior id

# 使进程脱离 GDB 调试

detach inferiors id

在这篇详尽的gdb教程的结尾部分,我真心希望大家能够点赞并收藏。这不仅是对我个人努力的认可,也是对我持续分享知识的热情的鼓励。每一个小小的赞和收藏都是对我最大的支持,让我有动力继续创作更多有价值的内容。让我们一起在学习和探索的道路上互相支持,共同进步!

相关推荐

王者赠送皮肤领取期限
365be体育平台

王者赠送皮肤领取期限

📅 07-07 👁️ 2993
御龙在天等级上限解析:目前最高等级是多少
365bet新网址

御龙在天等级上限解析:目前最高等级是多少

📅 09-16 👁️ 6134
OGREEN.HK 健康商店產品一覽
365bet新网址

OGREEN.HK 健康商店產品一覽

📅 07-24 👁️ 1732