当前位置: 首页 > news >正文

【Linux杂货铺】调试工具gdb的使用

49bae2e517414f4fb2dc54f8d5a619c2.png


 

目录

🌈前言🌈

📁背景介绍

📁 使用

list [行号] / [函数名] 

run/r

break/b  [行号] / [函数名]

info break

disable break

enable break

delete break [断点编号]

next/n

step/s

continue/c

finish

print/p  [变量] / [表达式]

set [变量]

display  [变量名]

undisplay  [编号]

until

📁 总结


🌈前言🌈

        本期【Linux杂货铺】将讲解Linux中调试工具gdb的使用,各个参数的含义,如何在Linux中将代码调试起来,以及各个参数对应的在IDE中的含义。

 f7ed26b5f18541eb9655a245704f4683.png个人博客:秋刀鱼的滋味@-CSDN博客

 126aa96596b14e769a51621096d7961d.png系列专栏:Linux杂货铺_秋刀鱼的滋味@的博客-CSDN博客

 

📁背景介绍

        在程序发布方式中,有两种模式:debug模式 和 release模式。release模式下是不能进行调试的,所以在开发过程之中,使用的都是debug模式。

        Linux在使用 gcc/g++编译出二进制程序时,默认使用的是release模式。

        要使用gdb调试,必须在源代码生成的二进制程序的时候,加上 -g 选项。

 

//test.c
#include <stdio.h>                             
int AddToTarget(int start , int end)
{int i = start;int sum = 0;for(;i <= end;i++){sum += i;}return sum;
}int main()
{printf("run begin...\n");int result = 0;result = AddToTarget(1,100);printf("resylt : %d \n",result);printf("run end...\n");return 0;
}

        先创建test.c文件,写入代码。

        通过gcc test.c -o test-debug -g命令,生成test-debug文件。

        最后 gdb test-debug  调试代码

📁 使用

list [行号] / [函数名] 

list / l + 行号:显示源代码,接着上次的位置往下列,每次列10行,知道代码尾。

44e9985ba2e84894a0d99feec8667372.png

list / l + 函数名:列出某个函数的源代码。

ccb08dcc998d483f8f0be4843ac71c21.png

run/r

        运行程序,从开始连续而非单步执行程序。在VS中,相当于F5。

5cd8a94e04fa4f7ebca614be62d07291.png

c4b49b0fa85a498e891ecae38b7960ba.png

break/b  [行号] / [函数名]

        在某一行或者某某个函数开头设置断点。在VS中相当于F9。

cc45fcc8657a42d1b1ca46c82de54bde.png

info break

        查看断点。其中断点是按编号操作的,编号按照创建顺序给出。

cc9e264f3c1f495dbe6f56513a2ff694.png

44aa343b85ab4cbfb2f165cc5d33456e.png

disable break

        禁用断点。

4511c075c8fa4b03bd312c6ef39b9521.png

        Enb表示断点是否启用,是的话参数为y,禁用为n。

enable break

        启用断点。

f1b0669e8409485e99e2d6500e5a194c.png

delete break [断点编号]

        删除断点。        

ba08ef2592da44a0b226fc770dbae100.png

next/n

        单条执行。但必须在程序run之后才能使用。run是调试,但不能一行的操作,所以必须配合断点b来使用n。

        在VS中next相当于F10,逐过程调试,不会进入函数体内部进行查看。

1557d1fbab6f45ba867664df00389310.png

f346a725a475426f881330a0aaf244f0.png

489043f05da7419791bf6ce25a90bb51.png

step/s

        进入函数调用调试。在VS中,相当于F11

b9da1307ba4d45b183d6c77b53cddd46.png

bdd26e4a3618408294a1ad5fb1c72351.png

continue/c

        从当前位置开始连续而非单步执行程序。相当于在执行到断点后,run程序。

b90df00a135b4306b6fed875c56f6655.png

finish

        执行到当前函数返回,然后等待接下来的命令。如我们step到函数内部,不想调试函数内部信息,只想查看函数执行完结果,可以使用finish,

47508e56e39849f98b2a3029e2ef844b.png

print/p  [变量] / [表达式]

        打印变量或者表达式的值。

6d75adba681348468d28dad2de9d5403.png

set [变量]

        修改变量的值。

690bd86248e04707a4f73f3f0f67d89b.png

display  [变量名]

        跟踪查看一个变量,你每次停下都显示它的值。在VS中,相当于监视窗口。

4c9e4843880b4c0fbc7f3e4466df5954.png

undisplay  [编号]

        取消先前的那些变量的跟踪

c7ad800f46a14db893e3f067293503d9.png

until

        跳转到指定行,中间的代码都是运行的。

503f84b16d6e4f069dff20f6a43b2eea.png

📁 总结

        以上,我们就对Linux中调试工具gdb做了讲解,包括了如何生成可调式版的代码,如何去调试等一系列内容,总体上来说非常简单,只需要多加练习即可。

        以上,就是本期【Linux杂货铺】的内容了,如果感觉对你有帮助,欢迎点赞,收藏,关注,Thanks♪(・ω・)ノ。

672be12c4f1b40cbbda500696c820308.gif

 

http://www.lryc.cn/news/309702.html

相关文章:

  • FL Studio Producer Edition2024中文进阶版Win/Mac
  • 无需邀请码,Xinstall实现精准分享归因
  • 机器人与AGI会撞出什么火花?
  • Linux yum安装pgsql出现Bad GPG signature错误
  • 第18章-DHCP
  • [物联网] OneNet 多协议TCP透传
  • 如何让网页APP化 渐进式Web应用(PWA)
  • 50 vmalloc 的实现
  • 程序员的金三银四求职宝典!
  • day04_拦截器Apifox角色管理(登录校验,API接口文档,权限管理说明,角色管理,添加角色,修改角色,删除角色)
  • 在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录
  • 【刷题】模拟
  • 【打工日常】使用docker部署在线Photopea用于linux下替代ps
  • leetcode 热题 100_盛最多水的容器
  • 基本正则表达式
  • sqlserver保存微信Emoji表情
  • 网络编程 io_uring
  • Java中的static
  • 如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问
  • lv20 QT进程线程编程
  • 什么是机器人学习?
  • 裸机程序--时间片调度
  • 【web APIs】5、(学习笔记)有案例!
  • 【刷题1】LeetCode 994. 腐烂的橘子 java题解
  • Java的运行机制与Java开发环境的搭建
  • 【Java】面向对象之多态超级详解!!
  • react 路由的基本原理及实现
  • [极客大挑战 2019]LoveSQL1 题目分析与详解
  • 探索RedisJSON:将JSON数据力量带入Redis世界
  • 【精通Spring】基于注解管理Bean