首页 > Note > GDB 常用命令一览

GDB 常用命令一览

2019年10月11日 发表评论 阅读评论

命令

GDB 是 Linux 下的命令行调试工具。
启动 GDB 有如下几种方式:

  1. gdb <program> 直接启动执行程序
  2. gdb <program> core 用gdb 同时调试一个可执行程序和core文件。core 是程序非法执行后 core dump 产生的文件
  3. gdb <program> <PID> 指定进程, gdb会自动 attach 上去。program 应该在 PATH 环境变量中可以搜索得到。

常用的 gdb 命令如下

信息 info

info 可以简写成 i

  • info args 列出参数
  • info breakpoints info break i b 列出所有断点
  • info break number i b number 列出序号为 number 的的断点
  • info watchpoints i watchpoints 列出所在 watchpoints
  • info threads 列出所有线程
  • inifo registers 列出寄存器的值
  • info set 列出当前 gdb的所的设置
  • i frame
  • i stack
  • i locals
  • i catch

断点和监视 break & watch

break 可以简写为 b

  • break fun_name b fun_name 在 fun_name 处打断点
  • b line_number 在 line_number 处打断点
  • b +offset 在offset 行后加断点
  • b -offset 同上
  • b file_name:fun_name 文件的方法名处打断点
  • b fine_name:line_number 同上
  • b *address 在某地址处打断点。适用于没有源码的情况
  • b line_number if condition 条件断点。当条件为 true 时会中断
  • tbreak tb 单次命中断点。如 tb 12 表示只会在第12行命中一次。
    watch 可以添加监视。watch 没有简写
  • watch var 监视var变量
  • watch condition 带条件的监视。如 watch a>1

删除和禁用断点

  • clear 清除当前行的断点
  • clear fun_name 清除 fun_name 中的所有断点
  • clear line_number 删除该行的断点
  • delete 简写 d . 删除所有的 breakpoints, watchpoints, or catchpoints.
  • d num 删除序号为 num 的断点
  • d num1-num2 删除序号从 num1 到 num2 的所有断点
  • disable/enable num 禁用/启用序号为 num 的断点
  • disable/enable num1-num2 禁用/启用 序号从 num1到 num2 的断点

调试

  • run 简写 r 运行程序
  • step 简写 s 单步,可以进入方法(相当于 VS 的 F11)
  • finish 跳出当前方法(相当于VS 的 sh+F11)
  • next 简写 n 单步,不会进入方法(相当于 VS 的 F10)
  • until line-number 运行到 line-number 行。line-number 只能比当前行数大。 until 还可以接 function name, address, filename:function or filename:line-number
  • where 显示当前行数和方法
  • backtrace 简写 bt 显示当前的栈信息
  • bt full 打印完整的栈信息
  • frame 简写 f 显示当前栈的 frame 信息
  • f number 选择frame
  • up / down / up number /down number 选择 frame

源码

  • list 简写 l 列出源码
  • l num 列出 num 行前后的源码
  • l fun 列出方法 fun 的源码
  • l start_num, end_num
  • l file_name:fun_name
  • set listsize count 设置一次显示多少行源码(默认为10)
  • show listsize 显示listsize
  • directiory dir_name 简写 dir dir_name , 将指定的目录加入源码文件的前缀
  • show dir
  • i line 显示 l 所指的行(注意不是当前行)在obj中的起始地址
  • i line line_number 同上
  • stepi si 汇编级调试
  • nexti ni

变量

  • print var 简写 p var 打印变量var
  • p file_name:var
  • p/x var 以16进制打印整型变量 。
  • p/d var 10进制
  • p/u var unsigned int
  • p/o var 8进制
  • p/t var 2进制 (1byte/8bits)
  • p/c var 以字符形式
  • p/f var 以 floating 形式
  • p/a var 以十六进制地址
  • x/4b &var 以 4 byte 打印var 的内存
  • ptype var 显示var 的类型
  • ptype date-type 显示原类型

启动

  • run 简写 r
  • continue 简写 c
  • kill 杀掉当前调试的程序
  • quit 简写 q 退出gdb

实践

源码:

编译:
> g++ -g ./test.c -o test

调试:

 

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.