Linux调试器-gdb使用

目录

1.gbd的介绍

主要的功能 :

基础用法总结: 

 2.gdb的基础操作

 1.生成调试

2.启动gdb

3.退出gdb 

 4.查看源码

5.运行程序 

6.断点的设置与操作 

1.断点的设置

2.查看断点 

 3.断点的禁用与启动

1.断点禁用

 2.断点重启

4.断点的删除 

​编辑

​编辑

5.逐过程运行

 6.逐语句运行

7.快速结束当前函数

8.运行至下一断点

9.打印变量值和取消

 10.跳转到指定行 


1.gbd的介绍

  • 程序的发布方式有两种,debug模式和release模式

编译时需要加上-g选项‌:编译源代码时必须使用-g参数保留调试信息,否则gdb无法进行调试。 

编译器形成可执行文件时,会给给可执行程序增加调试信息。 

主要的功能 :

  • 设置断点:在程序的某一行代码上设置断点,当程序执行到这一行时会暂停并等待调试命令。
  • 单步调试:逐行执行程序并观察每一行代码的执行情况,方便定位问题。
  • 查看变量和内存‌:在调试过程中查看各个变量的值,检查它们是否符合预期,同时可以查看内存的内容,了解程序的内部状态。
  • 捕捉错误:帮助捕捉程序的错误,包括内存访问错误、未处理的异常等,并在错误发生的地方停下来,提供相关信息。

基础用法总结: 

list(或l)显示源代码,默认前10行

list(或 l)+行号

显示binFile源代码,接着上次的位置往下列,每次列10行。
list(或 l) 函数名列出某个函数的源代码。
r 或 run运行程序。
n 或 next逐过程执行。
s 或 step进入函数调用
break(b)+行号在某一行设置断点
break (b)函数名在某个函数开头设置断点
info break查看断点信息。
finish执行到当前函数返回,然后停下来等待命令
print(或p)打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量打印当前变量值。
set var修改变量的值
continue(或c)从当前位置开始连续而非单步执行程序
run(或r)从开始连续而非单步执行程序
delete breakpoints删除所有断点
delete breakpoints n删除序号为n的断点
disable breakpoints禁用断点
enable breakpoints启用断点
info(或i) breakpoints参看当前设置了哪些断点
display 变量名跟踪查看一个变量,每次停下来都显示它的值
undisplay取消对先前设置的那些变量的跟踪
until X行号跳至X行
breaktrace(或bt)查看各级函数调用及参数
info(或 i) locals查看当前栈帧局部变量的值
quit(或q)退出gdb

 2.gdb的基础操作

后面的操作都是根据这个1加到100的代码进行操作。

 1.生成调试

 gcc -o [目标文件]  [源文件]  -g

gcc -o myprocess-debug myprocess.c -g

2.启动gdb

 gdb + [目标文件]

gdb myprocess-debug

 

3.退出gdb 

 quit 或 q

 4.查看源码

 list(或l)查看源码默认生成前十行,回车向下继续显示十行
list(或 l)+行号显示binFile源代码,接着上次的位置往下列,每次列10行。
list(或 l) 函数名列出某个函数的源代码。
list (l)

list(l) + 行数

上下部分一起显示 

list(l) + 函数

也是上下部分一起显示 

5.运行程序 

 r 或 run

正常运行程序的情况: 

6.断点的设置与操作 

断点操作+ [目标文件]:[位置]     

1.断点的设置
break(b)+行号在某一行设置断点
break (b)函数名在某个函数开头设置断点

 分别在17和20行设置断点

break(b)+行号   也能写成 break(b)+ [目标文件]:行号 后面的断点的操作也是可以如此

break (b)函数名

2.查看断点 

info(或i) breakpoints :参看当前设置了哪些断点

断点信息解释:

断点信息说明
Num断点序号,断点序号只增不减
Type断点类型,断点类型位 breakpoint
Disp断点执行一次之后是否有效,有效为 keep 反之为 dis
Enb断点使能,表示该断点是否被打开
Address断点处在哪个地址上
What断点的具体位置
 3.断点的禁用与启动
disable breakpoints禁用断点
enable breakpoints启用断点
1.断点禁用

disable [断点序号] 

 2.断点重启

enable [断点序号]

4.断点的删除 
delete breakpoints删除所有断点
delete breakpoints n删除序号为n的断点

 注意:不是全部断点的删除的多个断点删除,只能单独一个个删除

删除所有断点: 



5.逐过程运行

逐过程:

  • 遇到函数调用时会一次性执行完该函数,不会进入函数体调试,且会跳过空行。

n 或 next   :逐过程执行

这里17行跳到19行是因为源代码中18行是没有的 

 6.逐语句运行

逐语句

  • 遇到函数调用时会一次性执行完该函数,会进入函数体调试,且会跳过空行。

 s 或 step  :进入函数调用

7.快速结束当前函数

finish   执行到当前函数返回,然后停下来等待命令

 

8.运行至下一断点

continue(或c):从当前位置开始连续而非单步执行程序

 

9.打印变量值和取消

p 变量打印变量值。
display 变量名跟踪查看一个变量,每次停下来都显示它的值
undisplay取消对先前设置的那些变量的跟踪

 p + 变量 i  :打印当前 i 的值

 display 变量 i 和 sum :跟踪查看一个变量,每次停下来都显示它的值

undisplay + [序号]:取消变量跟踪显示

 10.跳转到指定行 

until +行号    跳转至某行

 until +12   跳转至代码12行

 

从 i 和 sum 的值,可以看出跳转的代码都是运行后的 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值