Linux GDB调试

本文最后更新于:2021年4月14日 晚上

概览:Linux gdb调试基本命令。

linux gdb调试

GDB可以完成的功能:

  • 启动程序,可以按照自定义的要求随心所欲的运行程序
  • 可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式)
  • 当程序被停住时,可以检查此时程序中所发生的事
  • 可以改变程序,将一个 BUG 产生的影响修正从而测试其他 BUG

调试前的准备

  1. gcc命令要打开调试选项-g-Wall在尽量不影响程序行为的情况下选项打开所有的warning
  2. 程序生成后不要修改源代码的名字等

-g选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以要保证调试时gdb要能找到源文件!

基础命令 - 启动、退出、设置参数

  • gdb a.out 启动调试
  • quit / q 退出程序
  • set args 10 20 设置参数,如果程序启动需要参数,args 后接参数列表
  • show args 查看设置的参数!

查看代码

  • list 或者 l 从默认位置显示代码
  • list 行号 从指定的行进行显示
  • list 函数名 从指定的函数开始显示
  • 注意:一般显示都是包含上下文,你指定的内容一般在正中间!

查看非当前文件代码

  • list 文件名:行号
  • list 文件名:函数名

gdb默认显示代码10行,可以设置参数

  • show list/listsize 查看显示几行d代码
  • set list/listsize 行数 设置显示行数

断点相关

设置断点

  • break / b 行号
  • break / b 函数名
  • break / b 文件名:行号
  • break / b 文件名:函数

查看断点

  • info break或者i b

删除断点

  • d / del / delete 断点编号

设置断点无效

  • dis / disable 断点编号

设置断点生效

  • ena / enable 断点编号

设置条件断点(多用于循环)

  • b 10 if i==5第10行,i=5时生效!
1
2
3
4
5
6
7
8
9
(gdb) b 25
Breakpoint 2 at 0xa86: file server1.c, line 25.
(gdb) b 33
Breakpoint 3 at 0xac7: file server1.c, line 33.
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000000a14 in main at server1.c:10
2 breakpoint keep y 0x0000000000000a86 in main at server1.c:25
3 breakpoint keep y 0x0000000000000ac7 in main at server1.c:33

运行

  • start 程序停在第一行

  • run 遇到断点时才停止

  • c / continue 继续运行,到下一个断点停止!

  • n / next 向下执行一行代码 不会进入函数体

  • s / step 向下单步调试,遇到函数进入函数体

  • finish 跳出函数体

变量操作

  • display 变量名 自动打印指定变量的值
  • i / info display
  • undisplay 编号
  • p / print 变量名 打印变量值
  • ptype 变量名 打印变量类型
  • set var 变量名 = 变量值 循环中用的较多
  • until 跳出循环

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!