GDB学习笔记

GDB学习笔记

介绍

GDB是GNU项目下的调试器,运行在类UNIX系统下,可以对C, C++, Go等语言进行调试。

使用方法

1. 使用gcc编译程序

由于gdb在调试程序的时候需要依赖于源代码,因此需要在编译阶段开启调试模式(开启-g选项)

1
gcc -g test.c -o test

2. 常用指令

指令 含义
gdb program 启动gdb调试program
set args 为待调试程序设置输入参数
show args 显示输入的参数
list/l 显示程序代码
list/l 行号 以输入行号为中间位置开始显示代码
list/l 函数名 显示某一函数的代码
list/l 文件名:行号 查看指定文件指定行号的源代码
list/l 文件名:函数名 查看指定文件指定函数的源代码
show list/listsize 查看一次显示的源代码行数
set list/listsize 设置一次显示的源代码行数
break/b 行号/函数名/文件名:行号 在某一行/函数入口/文件名:行号设置断点
info/i b 查看断点信息
delete/d 断点编号 删除某一编号的断点
dis/disable 断点编号 使某一编号的断点无效
ena/enable 断点编号 使某一编号的断点重新生效
break/b 行号 if 条件 设置条件断点,一般用在循环的位置(一般用在循环的位置)

3. gdb运行程序

  • 运行程序

    1
    2
    start //程序停在第一行
    run //到断点才停止,但是并不会执行断点代码
  • 继续运行,直到下一个断点停止

    1
    c/continue
  • 向下执行一行代码 (但是不会进入函数体)

    1
    n/next
  • 向下单步调试(遇到函数体会进入函数体)

    1
    2
    s/step
    finish(跳出函数体)
  • 变量操作

    1
    2
    p/print 变量名(打印变量值)
    ptype 变量名(打印变量类型)
  • 自动变量操作

    1
    2
    3
    display num(自动打印指定变量的值)
    i/info display
    undisplay 编号
  • 其他操作

    1
    2
    set var 变量名=变量值
    until 跳出循环(前提是循环内不含有断点)