Linux 使用gdb调试C程序

news2024/12/25 8:56:25

一、gdb的一些基础命令

l:显示代码
l n:跳转到当前代码页的第n行的代码
l filename.c :n:跳转到filename.c文件的第n行代码
b 行号:加断点
info break:查看断点信息
delete 断点编号:删除断点
r,运行程序
n,单步执行
c,继续执行,遇到断点停止执行
p,打印
s,进入函数
finish,退出函数
q,退出gdb

二、调试示例

先写一个main.c程序,该程序用来循环输出从键盘输入的字符串,直到遇到"end"结束循环:

在这里插入图片描述
在这里插入图片描述

编译并运行main.c:

在这里插入图片描述

发现和我们的预期并不一样,在输入"end"之后并没有结束循环,通过Ctrl+c结束这个进程。

  1. 进入gdb,gdb去调试Release版本:

在这里插入图片描述

从上图可以看出目前并不可以进行调试,之所以能打出一些信息,是因为这些信息是gdb打印出来的,而main程序还没有执行,下面的这句话
在这里插入图片描述
告诉我们在main程序中没有找到合适的符号,也就是没有包含调试信息,所以这个时候是调试不了的。在输入l进行显示代码时,下面这句话
在这里插入图片描述
告诉我们没有调试的符号表示被导入。说明这时的main程序是有问题的,没有包含调试信息。输入q退出gdb。

  1. gdb去调试Debug版本:

(1)编译和跟踪

按照gcc -o main main.c -g去编译main.c生成可执行程序main,并用gdb去跟踪main程序:

在这里插入图片描述
这时我们可以通过在这里插入图片描述
这句话看出gdb从main中读到了符号表。

(2)显示所编写的代码

通过gdb指令l显示代码

在这里插入图片描述

一次只能显示10行代码。

(3)设置断点

语法形式:break 行号,break可以简写为b

将断点加到第13行:

在这里插入图片描述

可以继续下断点:

在这里插入图片描述

查看加了哪些断点info break

在这里插入图片描述

删除断点delete Num

删除第2个断点:

在这里插入图片描述

(4)运行程序进行调试

输入run,可以简写为r,按回车:

在这里插入图片描述

当前程序执行到了13行停止。

输入n,让程序单步执行:

在这里插入图片描述

从上图可以看出输入了字符串"hello",然后程序运行到了17行的if语句。

这时,我们输入p buff来查看一些buff中的内容:

在这里插入图片描述

可以看到,当前buff中存放的是字符串"hello\n"。

继续输入n单步执行:

在这里插入图片描述

当前程序又执行到了13行。

我们继续单步执行,这次输入字符串"end",程序跳转到17行的if语句:

在这里插入图片描述

此时,我们再输入p buff来查看一些buff中的内容:

在这里插入图片描述

可以看到,当前buff中存放的是字符串"end\n",这和我们输入的字符串"end"并不相同。

因此,再继续执行时,程序依然会进入循环:

在这里插入图片描述

此时,我们就通过调试发现了代码中存在的问题。

  1. 退出gdb

输入q退出gdb,此时会提示如果要退出会杀死刚刚的main程序,是否要退出,输入y表示退出,按回车就退出gdb。
在这里插入图片描述

退出gdb之后,刚刚的main程序也就结束了:

在这里插入图片描述

  1. 通过调试结果修正代码

将strcmp()改为strncmp():

在这里插入图片描述

此时,我们再去编译main.c,执行main程序,结果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/868646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣 518. 零钱兑换 II

题目来源:https://leetcode.cn/problems/coin-change-ii/description/ C题解(来源代码随想录): 这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。但本题和纯完全背包不一样&#xff0c…

天津大数据培训机构哪家好?大数据必备知识

随着我国互联网IT行业的发展,我们步入了大数据时代,现在市场上急需大量的大数据专业人才,发展空间大,从业范围广,学习大数据专业对未来还是很有帮助的。今天小编来带大家了解一下大数据的知识和学习方式,作…

Pygame 入门教程

1. Pygame简介 Pygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏。 在开始学习Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行…

分布式定时任务系列5:XXL-job中blockingQueue的应用

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 Java并发编程实战1:java中的阻塞队列 引子 这篇文章的…

linux下查看谁在用显卡

一般查看显卡的使用情况使用的命令为 nvidia-smi但是这个只能输出显卡的占用及进程,看不到谁在用 信息如下 但是可以借助上面的PID信息,查看对应的进程是谁调用的, 命令为: ps -f -p 4417其中4417就是上图中的其中一个PID 输出…

snapshotter not loaded: overlayfs: invalid argument

测试containerd是否能创建和启动成功 执行如下命令拉取镜像并创建容器: 拉取容器 ctr i pull docker.io/library/nginx:alpine 创建容器 ctr c create --net-host docker.io/library/nginx:alpine nginx ctr task start -d nginx查看Containerd服务启动信息&…

【Freertos基础教程】任务管理之基本使用

文章目录 前言一、freertos任务管理是什么?二、任务管理涉及到的一些概念1.任务状态2.优先级3.栈(Stack)4.事件驱动5.协助式调度(Co-operative Scheduling) 二、任务的基本操作1.创建任务什么是任务 2.创建任务3.任务的删除4.任务的调度3.简单示例 总结 前言 本fre…

2023.8.12号论文阅读

文章目录 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法实验结果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法实验结果 TriFormer: A Multi-mod…

【杨氏矩阵——(详细解法)】

杨氏矩阵💕 题目🕵️ 思路展示🤯 假设在二维数组arr中查找某个数input: 查找思路🧐 利用杨氏矩阵(矩阵的每行从左到右是递增的,矩阵从上到下是递增的)的特性,我们可以&a…

CentOS7连接网络

1.下载centos7镜像文件 2.安装centos7 3.修改网卡,ens33. 注意: 这里使用的是dhcp,设置IPADDR192.168.31.64一方面是为了后面使用crt或者MobaXterm连接,另一方面它和windows电脑的网卡要一致.这样才可以连接到网络.win r,输入cmd,打开命令窗口输入ipconfig.可以看到IPv4: 102…

Pytorch深度学习-----完整神经网络模型训练套路

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Co…

【mysql】—— 表的约束

目录 序言 (一)空属性 (二)默认值 (三)列描述 (四)zerofill (五)主键 (六)自增长 (七)唯一键 &#…

git命令使用

君子拙于不知己,而信于知己。——司马迁 清屏:clear 查看当前面板的路径:pwd 查看当前面板的文件:ls 创建文件夹:mkdir 文件夹名 创建文件:touch 文件名 删除文件夹:rm -rf 文件夹名 删除文件:r…

【双指针_盛最多水的容器_C++】

题目解析 盛最多水的容器 算法原理 向内枚举: weight一定会减小 height不是不变就是减小要求的是盛水最多的容器,那么这些枚举情况就不需要。 拿比较小的数去向内枚举,v一直在减小,所以说直接排除 编写代码 class Soluti…

【rust/egui】(一)从编译运行template开始

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:rust windows安装参考:这里本文默认读者已安装相关环境(git、vscode等) 关于egui egui …

[数据集][目标检测]钢材表面缺陷目标检测数据集VOC格式2279张10类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2279 标注数量(xml文件个数):2279 标注类别数:10 标注类别名称:["yueyawan",&…

【变形金刚02】注意机制以及BERT 和 GPT

一、说明 我已经解释了什么是注意力机制,以及与转换器相关的一些重要关键字和块,例如自我注意、查询、键和值以及多头注意力。在这一部分中,我将解释这些注意力块如何帮助创建转换器网络,注意、自我注意、多头注意、蒙面多头注意力…

Mysql中如果建立了索引,索引所占的空间随着数据量增长而变大,这样无论写入还是查询,性能都会有所下降,怎么处理?

索引所占空间的增长确实会对MySQL数据库的写入性能和查询性能造成影响,这主要是由于索引数据过多时会导致磁盘I/O操作变得非常频繁,从而使性能下降。为此,可以采取以下几种方式来减缓这种影响: 1. 限制索引的大小:可以…

【已成功解决】使用vpn/代理后无法正常上网/无法正常访问网站

文章目录 一、问题描述二、解决步骤三、原因分析 一、问题描述 很多同学在学习访问学校提供的资源时或者一些小伙伴在公司办公时需要使用VPN。但是当我们关闭VPN后,却发现没有办法正常连接到互联网了。 可以尝试以下方法解决,至于导致这种情况发生的原可…

SpringBoot携带Jdk绿色部署项目

文章目录 SpringBoot携带Jdk绿色部署运行项目1. 实现步骤2. 自测项目文件目录及bat文件内容,截图如下:2-1 项目文件夹列表:2-2. bat内容 SpringBoot携带Jdk绿色部署运行项目 说明: 实际应用的不方便场景:1. 实际项目…