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¶
最后更新:
2025年5月9日 10:09:48
创建日期: 2023年8月30日 22:16:27
创建日期: 2023年8月30日 22:16:27