Linux GDB调试
本文最后更新于:2021年4月14日 晚上
概览:Linux gdb调试基本命令。
linux gdb调试
GDB可以完成的功能:
- 启动程序,可以按照自定义的要求随心所欲的运行程序
- 可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式)
- 当程序被停住时,可以检查此时程序中所发生的事
- 可以改变程序,将一个 BUG 产生的影响修正从而测试其他 BUG
调试前的准备
- gcc命令要打开调试选项
-g
,-Wall
在尽量不影响程序行为的情况下选项打开所有的warning - 程序生成后不要修改源代码的名字等
-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 |
|
运行
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 协议 ,转载请注明出处!