GDB Tutorial调试命令总结

什么是GDB

常用操作速查

GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。

命令 解释
file <path-to/*.elf> 加载符号表
c Continue,继续执行被调试程序,直至下一个断点或程序结束
b 设置断点
s step,执行一行源程序代码,如果此行代码中有函数调用,则进入该函数
si setp instruction, si命令类似于s命令,si针对汇编指令,s针对源码
n next,执行一行源程序代码,此行代码中的函数调用也一并执行,相当于step over
ni ni针对汇编指令,n针对源码
p Print的简写,显示指定变量(临时变量或全局变量)的值。可以是局部变量也可以是全局变量
i info,用于显示各类信息,详情请查阅“help i”。
i line 显示当前行号
q quit,退出gdb
help 对各类命令的详细介绍

基本操作

启动调试

读写内存断点

watch *(int*)0x22cbc0

编译

启动方式

设置断点

查看源码

打印查看

变量、表达式

地址

gdb中使用“x”命令来打印内存的值,格式为“x /nfu addr”。含义为以f格式打印从addr开始的n个长度单元为u的内存值。参数具体含义如下:
a)n:输出单元的个数。
b)f:是输出格式。比如x是以16进制形式输出,o是以8进制形式输出,等等。
c)u:标明一个单元的长度。b是一个byte,h是两个byte(halfword),w是四个byte(word),g是八个byte(giant word)。

以16进制格式打印地址的8个word的值:
x /8xw addr

最简单的就是,以16进制形式打印当前地址一个字
x addr

修改变量、地址、表达式

set var a =5
set {int}0x83040 = 4

查询运行信息

where/bt :当前运行的堆栈列表;
bt backtrace 显示当前调用堆栈
up/down 改变堆栈显示的深度
set args 参数:指定运行时的参数
show args:查看设置好的参数

info program: 来查看程序的是否在运行,进程号,被暂停的原因。
info variables :查看全局和静态变量
info locals :查看当前stack frame局部变量
info args :查看当前stack frame参数

窗口

layout:用于分割窗口,可以一边查看代码,一边测试:
layout src:显示源代码窗口
layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口

保持历史命令

使用命令历史

  • 默认情况在TUI模式下,上下箭头(Up, Down)按键已经被转成,代码窗口的上下移动,可以使用:Ctrl+P和Ctrl+N来调用前一条命令或后一条命令

  • 可以输入focus next来激活命令窗口,这样上下箭头(Up, Down)按键又编程前一条命令和后一条命令

下次启动gdb时,直接查找使用之前的历史命令

  • 在gdb中,缺省是不保存历史命令的。你可以通过如下命令来设置成保存历史命令:
    (gdb) set history save on
    但是,历史命令是缺省保存在了当前目录下的.gdb_history文件中。可以通过如下命令来设置要保存的文件名和路径:
    (gdb) set history filename <file's name>
    现在,我们把这两个命令放到$HOME/.gdbinit文件中:
    set history filename ~/.gdb_history
    set history save on

Ref

GDB中文指南

快速查找,理解

  1. https://wizardforcel.gitbooks.io/100-gdb-tips/content/print-registers.html
  2. http://c.biancheng.net/view/8123.html
  3. https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html

GDB官方资料

other

在线gdb工具:https://www.onlinegdb.com/

posted @ 2023-08-10 11:34  zephyr~  阅读(32)  评论(0编辑  收藏  举报