gdb 调试工具 基本使用
GNU调试器(英语:GNU Debugger,缩写:GDB),是GNU软件系统中的标准调试器,此外GDB也是个具有移携性的调试器,经过移携需求的调修与重新编译,如今许多的类UNIX操作系统上都可以使用GDB,而现有GDB所能支持调试的编程语言有C、C++、Pascal以及FORTRAN。
GDB还可以通过串口连接器 和 TCP/IP协议 实现 对 嵌入式程序的 远程调试功能
gdb 程序使用的大前提 ----- 程序是你自己编写的 用来修正你的逻辑 错误
被调试程序 需要在编译的时候 使用 -g 生成调试信息, 这样生成的程序 会比源程序大
基本指令:
gdb ./a.out
list: list 1 列出源码。根据源码指定 行号设置断点。
b: b 20 在20行位置设置断点。
run/r: 运行程序
n/next: 下一条指令(会越过函数) //步过
s/step: 下一条指令(会进入函数) //步入
p/print:p i 查看变量的值。
continue:继续执行断点后续指令。
finish:结束当前函数调用。 //如果误入了库函数里边,通过这个函数跳出来
quit:退出gdb当前调试。
其他指令:
run:使用run查找段错误出现位置。
set args: 设置main函数命令行参数 (在 start、run 之前)
//argv[0] path
//argv[1] 第一个参数
//argv[2] 第二个参数
//argv[n] 第n 个参数
run 字串1 字串2 ...: 设置main函数命令行参数
info b: 查看断点信息表
b 20 if i = 5: 设置条件断点。
ptype:查看变量类型。
bt:列出当前程序正存活着的栈帧。
frame: 根据栈帧编号,切换栈帧。 //可以查看不同数据栈帧里的变量
display:设置跟踪变量 //一直显示
undisplay:取消设置跟踪变量。 使用跟踪变量的编号。
栈帧的理解
分清楚 调用栈 和 数据栈