Vous apprendre étape par étape comment utiliser GDB pour déboguer des programmes : un guide complet de l'entrée à la maîtrise

Le débogage est une partie très importante du développement logiciel, il peut nous aider à trouver les erreurs dans le programme et à les corriger. Dans les systèmes Linux, GDB est un outil de débogage très populaire et presque tous les développeurs l'utilisent pour déboguer des programmes. Cet article présentera en détail comment utiliser GDB pour déboguer des programmes. Si vous trouvez le contenu utile, n'oubliez pas de l'aimer et de l'enregistrer. Ce sera un énorme encouragement pour moi. Commençons ce voyage d’apprentissage ensemble !

Étape 1 : Installer GDB

1.1. Installation du gestionnaire de packages

Sur les systèmes Linux, GDB peut être installé à l'aide d'un gestionnaire de packages. Par exemple, sur les systèmes Ubuntu, vous pouvez utiliser la commande suivante pour installer GDB :

sudo apt-get install gdb

1.2. Téléchargez le code source, compilez et installez

# 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

Étape 2 : ajouter des informations de débogage lors de la compilation du programme

Lors de la compilation de votre programme, vous devez utiliser -gdes options pour ajouter des informations de débogage. Par exemple, si vous souhaitez compiler test.cun programme nommé, vous pouvez utiliser la commande suivante :

gcc -g -Wall test.c -o test

-gFonction : Ajoutez des informations sur le code source dans le fichier exécutable, telles que quelle ligne du fichier exécutable correspond à quelle ligne du code source. Fonction
-Wall : Activez tous les avertissements sans affecter le comportement du programme, découvrez plus de problèmes et évitez les BUG inutiles.

Cela générera un fichier exécutable avec des informations de débogage test.

Étape 3 : démarrez GDB, quittez et affichez le code

# 启动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 行数

Étape 4 : opération du point d'arrêt 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

Étape 5 : opération de débogage GDB

5.1 Débogage en une seule étape

Dans GDB, vous pouvez utiliser la commande suivante pour parcourir un programme :

# 运行gdB程序
start(程序停在第一行)
run(遇到断点才停)

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

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

# 向下单步调试(遇到函数进入函数体)
s/step
finish(跳出函数体)

# 变量操作
p/print变量名(打印变量值)
ptype 变量名(打印变量类型)

# 自动变量操作
display num(自动打印指定变量的值)
i/info display
undisplay 编号

# 其它操作
setvar变量名=变量值
until(跳出循环)

Pour afficher la pile d'appels actuelle, utilisez backtracela commande. Par exemple, pour afficher les détails de la pile d'appels actuelle, entrez la commande suivante :
backtrace

5.2 Débogage multi-processus

Lorsque vous utilisez GDB pour déboguer, GDB ne peut suivre qu'un seul processus par défaut. Vous pouvez configurer l'outil de débogage GDB pour suivre le processus parent ou suivre le processus enfant via des instructions avant d'appeler la fonction fork. Le processus parent est suivi par défaut.

# 设置调试父进程或者子进程
set follow-fork-mode [parent(默认)| child]

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

# 查看调试的进程
info inferiors

# 切换当前调试的进程
inferior id

# 使进程脱离 GDB 调试
detach inferiors id

À la fin de ce tutoriel détaillé sur GDB, j'espère vraiment que tout le monde pourra l'aimer et le sauvegarder. Ce n'est pas seulement une reconnaissance de mes efforts personnels, mais aussi un encouragement à ma passion pour continuer à partager mes connaissances. Chaque petit like et chaque collection est mon plus grand soutien et me donne la motivation pour continuer à créer du contenu de plus grande valeur. Soutenons-nous les uns les autres sur le chemin de l’apprentissage et de l’exploration et progressons ensemble !

Je suppose que tu aimes

Origine blog.csdn.net/BinBinCome/article/details/133563898
conseillé
Classement