gdb 命令相关 ¶
约 750 个字 3 行代码 预计阅读时间 3 分钟
Abstract
gdb 相关的一些命令,插件等
前言 ¶
什么是 gdb ¶
GNU 调试器(英语:GNU Debugger,缩写:GDB
) ,是 GNU 软件系统中的标准调试器,此外 GDB 也是个具有移携性的调试器,经过移携需求的调修与重新编译,如今许多的类 UNIX 操作系统上都可以使用 GDB,而现有 GDB 所能支持调试的编程语言有 C、C++、Pascal 以及 FORTRAN。———— 维基百科
准备工作 ¶
通常,在为调试而编译时,我们会关掉编译器的优化选项(-O)
, 并打开调试选项(-g)
。另外,-Wall
在尽量不影响程序行为的情况下选项打开所有 warning,也可以发现许多问题,避免一些不必要的 BUG。
例如: gcc -g -Wall program.c -o program
-g
选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机
器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调
试时必须保证gdb
能找到源文件。
调试下列程序前要做准备工作,在 shell 中输入:
gdb 命令 ¶
过程操作 ¶
gdb
( 可执行程序 ) 启动 gdb 调试quit / q
退出 gdb 调试set args 10 20
给程序设置参数show args
获取设置的参数help
用来查看调试帮助或具体指令的相关信息list
查看当前文件代码,可以指定文件和函数 (l)set list / listsize
设置显示的行数print 变量名
打印变量值 (p)ptype 变量名
打印变量类型until
跳出循环
断点 ¶
gdb break (file:)line/function
断在 ( 文件 :) 行号或函数 (b)gdb break *0x....
断在地址gdb info breakpoints
查看断点及状态 (i b)gdb delete / clear
清除所有断点 (d/cl)gdb delete <breakpoint#>
删除某一断点(从 i b 得来断点号)gdb clear ...
清除某一符号、地址处的断点gdb disable <breakpoint#>
禁用某一断点gdb enable <breakpoint#>
启用某一断点gdb watch ...
在某处增加观察点,delete、enable、disable 与断点共用gdb break/watch <where> if <condition>
如果条件满足则断gdb condition <breakpoint#> <condition>
更改条件
运行 ¶
gdb start
程序停在第一行gdb run
直接运行,遇到端点才停止 (r)gdb continue
继续运行 (c)gdb step
运行到下一条源码 (s)gdb next
单步运行,跳过函数 (n)gdb finish
运行完当前函数 (fin)gdb attach <pid>
连接程序gdb detach
从当前程序断连gdb target remote localhost:1234
连接 qemu
调用栈 ¶
gdb backtrace
查看调用栈 (bt)gdb frame
查看当前帧栈gdb up/down
移动当前帧栈(向 main / 远离 main)gdb info locals
查看当前帧栈变量gdb info args
查看函数参数
gdb 插件 ¶
gdb-peda¶
每条指令带寄存器、汇编、内存数据回显
其实就是下载完成后 , 将 source ~/peda/peda.py
写入 ~/.gdbinit
Reference¶
最后更新:
2023年8月30日 22:28:45
创建日期: 2023年8月30日 22:16:27
创建日期: 2023年8月30日 22:16:27