这里说的都是实用的操作命令
操作符号
add-symbol-file vmlinux 0xc0000000
将vmlinux的符号信息加载到 0xc0000000地址
symbol-file
移除当前调试文件的符号
断点
break start_kernel
在start_kernel函数处下断点,前提是必须加载了符号表。
break *0xc048e2e0
在地址为0xc048e2e0处下断点
对于break main.c:123表示在main.c的123行断下。不推荐使用这种,
由于编译的时候很多优化可能导致错误,因此不推荐。
不同调试方式
使用tcp方式开启调试。
target remote 192.168.0.2:2333
连接192.168.0.2:2333号端口实现远程调试(远端有gdbderver)。如果是本机的gdbserver可以不写ip 直接用 target remote :2333
数据查看
查看内存
x/[number][format][size] address
number是查看数据的个数
format是查看的数据的格式 o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char) and s(string)
size是每个数据的字节 b(byte), h(halfword), w(word), g(giant, 8 bytes)
address是地址
例如
x/10xw 0xc00000
表示以16进制显示从地址0xc00000开始的10个word数据。
x/[10个数据][x表示以16进制显示][w表示每个数据是WORD]
查看基本寄存器
info registers 可以简写为 i r
查看单个寄存器 例如i r eax 或者i r r0
查看所有寄存器
info all-registers
反汇编查看
disas assress,+length
例如
disas 0xc048e2e4,+40
表示查看从0xc048e2e4开始 40字节的反汇编代码
调试操作
c 等于continue。表示让程序跑起来。和go一个意思。
si 表示step instruction 单步执行一条语句 后面可以带数字n。表示单步执行n条指令.si 2表示单步执行两条指令