GDB常用命令汇总
1 设置参数
- 启动GDB时设置参数
gdb --args main_args arg1 arg2 arg3
--args 后面紧跟可执行文件的名称 main_args,然后是要传递给 main 函数的参数 arg1、arg2 和 arg3。
- 在GDB会话中设置参数
gdb main_args
在 GDB 提示符下使用 set args 命令设置参数:
(gdb) set args arg1 arg2 arg3
2 执行到函数的某一行
2.1 设置断点
可以通过设置断点的方式来实现运行到函数某一行,例如:
break func:6 #在func函数第6行打下断点
2.2 until命令
也可以使用until命令,但是until命令是运行到函数内部之后才可以使用的命令:
break func # 在func函数设置断点
continue # 运行至func函数触发断点
until 6 # 运行到func函数的第6行
3 设置断点
GDB设置断点常用的两种方式,一种是直接使用break命令,例如在main.c文件第10行设置断点:
break main.c:10
另外一种是我们可以在内存的摸个位置设置断点,例如:
b *0x00005555555553a0
4 打印
GDB的x命令可以用于打印内存的值,方便查看内存是否被写入。
x/[数量][格式][单位] <内存地址或表达式>
格式如下:
| 符号 | 说明 | 示例 |
|---|---|---|
x |
十六进制整数 | 0x7fffffffe3a0 |
d |
十进制有符号整数 | -12345 |
u |
十进制无符号整数 | 4294967295 |
o |
八进制整数 | 01234567 |
t |
二进制(二进制的“字面”) | 01100001 |
a |
地址(符号+偏移) | main+0x10 |
c |
ASCII 字符 | 'A' |
s |
字符串 | "Hello World" |
i |
汇编指令 | mov eax, 0x1 |
单位如下:
| 符号 | 说明 | 大小(字节) |
|---|---|---|
b |
字节(byte) | 1 |
h |
半字(half-word) | 2 |
w |
字(word) | 4(32位系统) |
g |
双字(giant) | 8(64位系统) |
例如:
(gdb) x /16xb 0x5555555592a0
0x5555555592a0: 0x07 0x08 0x09 0x04 0x05 0x06 0x07 0x08
0x5555555592a8: 0x09 0x0a 0x01 0x02 0x03 0x04 0x05 0x06
5 查看函数源码
例如查看main函数的代码:
(gdb) list main

浙公网安备 33010602011771号