GDB的命令

 

一、断点相关

1. breakInfo:根据一定的条件暂停程序的运行

 

命令

作用

break

下一个指令处设置断点

break [file]:function

在 file 文件的 function 函数入口设置断点

break [file]:line

在 file 文件的第 line 行设置断点

break [+-] offset

在当前偏移量 [+-] offset 处设置断点

break *addr

在地址为 addr 处设置断点

break ... if expr

设置条件断点,条件表达式 expr 为真时

info breakpoints

查看断点

ignore n count

对编号为 n 的断点忽略 count 次

clear

清除所有断点

clear function

清除所有位于 function 内的断点

clear [file]:line

清除文件 file 的 line 行断点

clear n

删除编号为 n 的断点

enable n

启用编号为 n 的断点

disable n

禁用编号为 n 的断点

save breakpoints file

保存断点信号到 file 文件中

source file

从 file 文件中导入断点信息

 

2. watchpoint:监控当监听的表达式或者变量变化时,程序暂停运行

命令

作用

watch variable

监控 variable 变量

watch var1+var2

监控表达式值变化

rwatch variable

监控数据读变化,仅支持硬件实现

awatch variable

监控数据读写变化,仅支持硬件实现

info watchpoints

查看监控断点列表

set can-use-hw-watchpoints 0

强制 watch 使用软件实现

print &variable

查看变量的内存地址

watch *(type*)address

监控类型为 type 的 address 地址

watch -l variable

指定 location 参数

watch variable thread 1

当线程 1 修改 variable 值时中断

 

3. cathcpoint:监控信号产生

命令

含义

catch fork

调用fork时中断

tcatch fork

设置的断点只触发一次

catch syscall ptrace

为 ptrace 系统调用设置断点

 

二、命令行

命令

左右

run arglist

运行程序,arglist 是程序的参数列表

set args arglist

指定启动命令行参数

set args

指定空的列表参数

show args

打印命令行列表

 

三、程序栈

命令

作用

backtrace [n]

打印第 n 个帧栈

frame [n]

选择第 n 个帧栈,如果不存在则打印当前帧栈

up n

选择当前帧栈编号 +n 的帧栈

down n

选择当前帧栈编号 -n 的帧栈

info frame [addr]

打印当前选择的帧栈

info args

当前帧栈的参数列表

info local

当前帧栈的局部变量

 

四、多进程

命令

作用

info inferiors

查看进程列表

attach pid

绑定进程id

inferior num

切换到指定进程进行调试

print $_exitcode

显示程序退出时的返回值

set follow-fork-mode child

追踪子进程

set follow-fortk-mode parent

追踪父进程

set detach-on-fork on

fork 调用时只追踪其中一个

set detach-on-fork off

fork 调用时会同时追踪父子进程

 

五、多线程

命令

作用

info threads

查看线程列表

print $_thread

显示当前正在调试的线程编号

set scheduler-locking on

调试一个线程时,其他线程暂停执行

set scheduler-locking off

调试一个线程时,其他线程同步执行

set scheduler-locking step

仅用 step 调试时其他线程不执行,用其他命令如 next 时其他线程执行

 

六、打印输出

1. 打印变量

命令

作用

whatis variable

查看变量类型

ptype variable

查看变量详细的类型信息

info variables var

查看定义该变量的文件,不支持局部变量

 2. 打印字符串

命令

作用

x/s str

打印字符串

set print element 0

打印不限制字符串长度或不限制数组长度

call printf(“%s\n”,xxx)

打印不会含有多余转移符的字符串

printf “%s\n”, xxx

同上

 

3. 打印数组

命令

作用

print *array@10

打印从数组开头连续10个元素的值

print array[60]@10

打印 array 数组下标从 60 开始的 10 个元素,即第 60~69 个元素

set print array-indexes on

打印数组元素时,同时打印数组的下标

 

4. 打印指针

命令

作用

print ptr

查看该指针指向的类型及指针地址

print *(struct xxx*)ptr

查看指向结构体的内容

 

5. 打印指定内存地址的值

命令 

作用

x/8xb

以16进制打印数组 array 的前 8 个 byte 的值

x/8xw array

以 16 进制打印数组 array 的前 16 个 word 的值

 

6. 打印局部变量

命令

左右

info locals

打印当前函数局部变量的值

backtrace full

打印当前栈帧各个函数的局部变量值,可以缩写为 bt

bt full n

从内到外显示 n 个栈帧及其局部变量

bt full -n

从外到内显示 n 个栈帧及其局部变量

 

7. 打印结构体

命令

作用

set print pretty on

每行只显示结构体的一名成员

set print null-stop

不显示’\000’这种数据

 

七、函数跳转

命令

作用

set step-mode on

不跳过不含调试信息的函数,可以显示和调试汇编代码

finish

执行完当前函数并打印返回值,然后触发中断

return 0

不再执行后面的指令,直接返回,可以指定返回值

call printf(“%s\n”,str)

调用printf函数,打印字符串

print func()

调用func函数(call 命令也行)

set var variable=xxx

设置变量variable的值为xxx

set {type}address = xxx

给存储地址为 address,类型为 type 的变量赋值

info frame

显示函数堆栈信息(堆栈帧地址、指令寄存器的值等)

八、其他

1. 图形化

命令

作用

layout src

显示源码窗口

layout asm

显示汇编窗口

layout split

显示源码和汇编窗口

layout regs

显示寄存器+源码或者汇编窗口

winhegiht src+5

源码窗口高度增加 5 行

winheight asm -5

汇编窗口高度减少 5 行

winheight cmd + 5

控制台窗口高度增加 5 行

winheight regs – 5

寄存器窗口高度减少 5 行

2. 汇编相关

命令

作用

disassemble function

查看函数的汇编代码

disassemble /mr function

同时比较函数源代码和汇编代码

3. 调试和保存 core 文件

 

命令

作用

file exec_file *#*

加载可执行文件的符号表信息

core core_file

加载 core-dump 文件

gcore core_file

生成 core-dump 文件,记录当前进程的状态

 

posted @ 2022-06-02 14:19  王清河  阅读(184)  评论(0编辑  收藏  举报