Ensine passo a passo como usar o GDB para depurar programas: um guia completo da entrada ao domínio

A depuração é uma parte muito importante do desenvolvimento de software, pois pode nos ajudar a encontrar erros no programa e corrigi-los. Em sistemas Linux, o GDB é uma ferramenta de depuração muito popular e quase todos os desenvolvedores a utilizam para depurar programas. Este artigo apresentará em detalhes como usar o GDB para depurar programas. Se você achar o conteúdo útil para você, não se esqueça de curtir e salvá-lo. Isso será um grande incentivo para mim. Vamos começar esta jornada de aprendizagem juntos!

Passo 1: Instale o GDB

1.1. Instalação do gerenciador de pacotes

Em sistemas Linux, o GDB pode ser instalado usando um gerenciador de pacotes. Por exemplo, em sistemas Ubuntu, você pode usar o seguinte comando para instalar o GDB:

sudo apt-get install gdb

1.2. Baixe o código-fonte, compile e instale

# 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

Passo 2: Adicione informações de depuração ao compilar o programa

Ao compilar seu programa, você precisa usar -gopções para adicionar informações de depuração. Por exemplo, se quiser compilar test.cum programa nomeado, você pode usar o seguinte comando:

gcc -g -Wall test.c -o test

-gFunção: Adicione informações do código-fonte ao arquivo executável, como qual linha do arquivo executável corresponde a qual linha do código-fonte.
-WallFunção: Ative todos os avisos sem afetar o comportamento do programa, descubra mais problemas e evite BUG desnecessários

Isto irá gerar um arquivo executável com informações de depuração test.

Passo 3: Inicie o GDB, saia e visualize o código

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

Etapa 4: operação do ponto de interrupção do 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

Etapa 5: operação de depuração do GDB

5.1 Depuração em etapa única

No GDB, você pode usar o seguinte comando para percorrer um programa:

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

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

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

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

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

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

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

Para visualizar a pilha de chamadas atual, use backtraceo comando. Por exemplo, para visualizar detalhes da pilha de chamadas atual, digite o seguinte comando:
backtrace

5.2 Depuração multiprocesso

Ao usar o GDB para depuração, o GDB pode rastrear apenas um processo por padrão. Você pode definir a ferramenta de depuração do GDB para rastrear o processo pai ou rastrear o processo filho por meio de instruções antes de chamar a função fork. O processo pai é rastreado por padrão.

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

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

# 查看调试的进程
info inferiors

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

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

No final deste tutorial detalhado do gdb, eu realmente espero que todos possam gostar e salvá-lo. Isto não é apenas um reconhecimento dos meus esforços pessoais, mas também um incentivo à minha paixão em continuar compartilhando conhecimento. Cada pequena curtida e coleção é meu maior apoio e me dá motivação para continuar criando conteúdo mais valioso. Vamos apoiar uns aos outros no caminho do aprendizado e da exploração e progredir juntos!

Acho que você gosta

Origin blog.csdn.net/BinBinCome/article/details/133563898
Recomendado
Clasificación