GDB学习--基本操作
本文最后更新于:2021-11-03 下午
前言
记录一下学习GDB的一些东西,也不是所有的完全指令,主要还是一些日常用的。
在这里记录了一些比较全的命令,随时可以查看这里
https://github.com/evilpan/awesome-cheatsheets/blob/master/tools/gdb.txt
GDB的一些命令
先写一个小DEMO用来后面的GDB调试
1 |
|
输入命令gdb,就可以打开gdb了,如图是gdb的界面。
先列出一些gdb的常用指令。
命令 | 功能 |
---|---|
run-r | 运行程序,如果碰到断点的话就会停下来 |
break-b | 设置断点 |
help-h | 帮助菜单 |
step-s | 单步步进,就是OD里的F7 |
next-n | 单步步过,也就是OD里的F8 |
finish-fin | 执行程序直到指定的栈帧返回,也就是调用了一个函数,执行到retn再执行retn |
print-p | 打印一些信息 |
quit-q | 退出 |
GDB操作
打开gdb之后,输入file + 文件名 即可将文件附加进去。
输入start
命令可以停在main函数处,与run
命令的区别是,后者是运行碰到断点停下,前者是停在main函数处。
断点类
break
指令可以下断点,快捷是b,不带任何参数时,是在所选栈帧中执行的下一条指令处下断。
b func
:对函数下断,如图对main和add函数下断。
b line
:在当前源代码的指定行下断。
b file:line
:在源码文件的line行处下断。
b file:function
:在源码文件的function处下断。
b *addr
:在程序指定地址处下断。
info breakpoints
:可以列出当前所有的断点信息,快捷i b
delete num
:删除指定编号的断点。
clear function
:删除指定函数的断点
delete
:删除所有断点
运行类
run
:运行程序
run args
:以某参数运行程序
set args (args)
:设置参数
show args
:查看当前的运行参数
step
:单步步入,碰到函数会进入,就是OD中的F7。
step count
:单步conut次
next
:单步步过,OD中的F8
next count
:单步count次
finish
:结束当前函数的运行
kill
:杀死当前运行的函数
栈帧
bt
:打印当前backtrace
frame
:显示当前运行的栈帧
浏览数据
print expression
:打印表达式,可以简写为p
p /x expression
:十六进制输出
p /x $寄存器
:十六进制打印寄存器的值
x/<n/f/u> <addr>
:打印指定地址的内存数据,其中n是一个正整数,表示显示内存的长度;f是显示的格式,字符串可以是s,指令地址可以用i;u表示从当前地址往后请求的字节数,不指定的话默认是4字节,b代表单字节,w表示4字节,g表示8字节。
输出格式:
- x 按十六进制格式显示变量;
- d 按十进制格式显示变量;
- u 按十六进制格式显示无符号整型;
- o 按八进制格式显示变量;
- t 按二进制格式显示变量;
- a 按十六进制格式显示变量;
- c 按字符格式显示变量;
- f 按浮点数格式显示变量。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!