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


目录

🌈前言🌈

📁背景介绍

[📁 使用](#📁 使用)

[list [行号] / [函数名]](#list [行号] / [函数名])

run/r

[break/b [行号] / [函数名]](#break/b [行号] / [函数名])

[info break](#info break)

[disable break](#disable break)

[enable break](#enable break)

[delete break [断点编号]](#delete break [断点编号])

next/n

step/s

continue/c

finish

[print/p [变量] / [表达式]](#print/p [变量] / [表达式])

[set [变量]](#set [变量])

[display [变量名]](#display [变量名])

[undisplay [编号]](#undisplay [编号])

until

[📁 总结](#📁 总结)


🌈前言🌈

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

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

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

📁背景介绍

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

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

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

cpp 复制代码
//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行,知道代码尾。

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

run/r

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

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

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

info break

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

disable break

禁用断点。

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

enable break

启用断点。

delete break [断点编号]

删除断点。

next/n

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

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

step/s

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

continue/c

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

finish

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

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

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

set [变量]

修改变量的值。

display [变量名]

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

undisplay [编号]

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

until

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

📁 总结

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

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

相关推荐
程途拾光15817 小时前
企业部门协作泳道图制作工具 PC端
大数据·运维·流程图
dishugj18 小时前
【linux】Redhat 6.3系统安装zabbix-agent软件包,无法使用YUM源问题
linux·运维·zabbix
石像鬼₧魂石18 小时前
HexStrike-AI人工智能 渗透测试学习(Metasploitable2 192.168.1.4)完整流程总结
学习·ubuntu
非凡ghost18 小时前
MusicPlayer2(本地音乐播放器)
前端·windows·学习·软件需求
无奈笑天下18 小时前
【麒麟镜像vmtools异常排查指导书】
linux·运维·经验分享·云计算·kylin
dajun18112345618 小时前
PC端中文免费在线跨职能泳道图制作工具
运维·架构·流程图·敏捷流程·交通物流
大数据追光猿18 小时前
【大数据Doris】生产环境,Doris主键模型全表7000万数据更新写入为什么那么慢?
大数据·经验分享·笔记·性能优化·doris
sevenez18 小时前
Vibe Coding 实战笔记:从“修好了C坏了AB”到企业级数据库架构重构
c语言·笔记·数据库架构
智嵌电子18 小时前
【笔记篇】【硬件基础篇】模拟电子技术基础 (童诗白) 第10章 模拟电子电路读图
笔记·单片机·嵌入式硬件
Xの哲學19 小时前
Linux多级时间轮:高精度定时器的艺术与科学
linux·服务器·网络·算法·边缘计算