Linux使用gdb调试多文件的C程序

【例】通过vi创建两个.c文件main.c和add.c:

在这里插入图片描述

一步编译main.c和add.c文件,并加入调试信息:

在这里插入图片描述

1. 在被调函数中加断点时,在执行主函数时,会自动进入被调函数

(1)进入gdb,跟踪main程序:

在这里插入图片描述

(2)显示代码

输入l显示的是当前main.c的代码:

在这里插入图片描述
输入l 文件名:行号显示另一个文件中的代码:

输入l add:1显示add.c的代码

在这里插入图片描述

(3)设置断点

①在当前显示的文件中加断点

因为刚刚输入l add:1显示add.c的代码,所以此时加断点,是在add.c中加断点:

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

②显示别的文件,在别的文件中加断点

输入l main:1显示main.c中的代码:

在这里插入图片描述

这时可以在main.c中加断点:

在这里插入图片描述

③给指定函数加断点

给指定函数加断点是在函数开始的地方加了断点

在这里插入图片描述

(4)启动程序

输入r启动程序:

在这里插入图片描述
遇到第一个断点停止。

输入n单步执行:

在这里插入图片描述

查看a的值:

在这里插入图片描述

查看b的值:

由于此时b还没有赋值,因此b的值为0

在这里插入图片描述

查看a+b的值:

在这里插入图片描述

查看a和b的地址:

在这里插入图片描述

然后可以输入c继续执行,直到遇到第二个断点:

在这里插入图片描述

这里自动进入了函数add是因为在add里面加了断点。

继续单步执行:

在这里插入图片描述

此时,查看d的值:

在这里插入图片描述

继续执行,执行结果d的值也是5:

在这里插入图片描述
(5)退出gdb

在这里插入图片描述

2. 不在被调函数中加断点时,不会进入这个被调函数的内部

(1)进入gdb,跟踪main程序

在这里插入图片描述

(2)显示代码

直接显示main.c文件中的代码:

在这里插入图片描述

(3)设置断点

在这里插入图片描述

(4)运行程序

在这里插入图片描述

连续单步执行:

在这里插入图片描述

此时,如果继续单步执行,就会默认执行通过add:

在这里插入图片描述

查看d的值,仍然是正确的:

在这里插入图片描述

可以发现虽然gdb没有跟踪到add内部,跳过了add函数内部的执行过程,通过单步执行,add执行直接可以通过。

(5)退出gdb

在这里插入图片描述

3. 没有在被调函数加断点时怎么进入被调函数

(1)进入gdb,跟踪main程序

在这里插入图片描述

(2)显示代码

直接显示main.c文件中的代码:

在这里插入图片描述

(3)设置断点

在这里插入图片描述

(4)运行程序

在这里插入图片描述

此时,如果要进入add函数的内部,要输入s

在这里插入图片描述

可以看到,这时就进入到add函数内部了。

当确定add函数内部没有错误时,退出add函数,输入finish

在这里插入图片描述

这时就退出了add函数,重新回到了main函数。

(5)退出gdb

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab绘制圆形(rectangle函数、viscircles函数和圆的参数方程)

基于matlab绘制圆形 一、rectangle函数 对于绘制圆心坐标为(x,y)半径为r的圆形,函数为: x0; y0; r1; rectangle(Position, [x-r,y-r,2*r,2*r], Curvature, [1 1],EdgeColor, r); axis equalEdgeColor表示颜色 二、…

【Ubuntu】安装docker,docker compose 以及部署一个docker应用

大家好!在过去,已经分享了很多有关通过Docker部署应用的内容。今天,我将为大家详细介绍如何在Ubuntu系统上部署最新的Docker平台。 Docker是什么 Docker是一个开源的容器化平台,它允许您将应用程序及其所有依赖项打包到称为容器…

以http_proxy和ajp_proxy方式整合apache和tomcat(动静分离)

注意:http_proxy和ajp_proxy的稳定性不如mod_jk 一.http_proxy方式 1.下载mod_proxy_html.x86_64 2.在apache下创建http_proxy.conf文件(或者直接写到conf/httpd.conf文件最后) 3.查看server.xml文件 到tomcat的安装目录下的conf/serve…

ThinkPHP成考学员管理平台

有需要请加文章底部Q哦 可远程调试 ThinkPHP成考学员管理平台 一 介绍 成考学员管理平台基于FastAdmin框架开发,数据库mysql,是一款针对学员,教师,专业,课程,成绩,学费等信息管理的系统&#…

大数据Flink(五十八):Flink on Yarn的三种部署方式介绍

文章目录 Flink on Yarn的三种部署方式介绍 一、​​​​​​​Session模式

分享Python技术下AutojsPro7云控代码

引言 有图有真相,那短视频就更是真相了。下面是三大语言的短视频。 Java源码版云控示例: Java源码版云控示例在线视频 Net源码版云控示例: Net源码版云控示例在线视频亚丁号-知识付费平台 支付后可见 扫码付费可见 Python源码版云控示例…

Redis内网主从节点搭建

Redis内网主从节点搭建 1、文件上传2、服务安装3、服务启动4、配置主从复制 1、文件上传 内网环境手动上传gcc-c、redis.tar文件 2、服务安装 # 解压 unzip gcc-c.zip unzip gcc_rpm.zip tar -zxvf redis-6.2.13.tar.gz# 安装 cd gcc_rpm/ rpm -ivh *.rpm --nodeps --force…

【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

ECANet(Efficient Channel Attention Network)是一种用于图像处理任务的神经网络架构,它在保持高效性的同时,有效地捕捉图像中的通道间关系,从而提升了特征表示的能力。ECANet通过引入通道注意力机制,以及在…

【脚踢数据结构】深入理解栈

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤🤔&…

【BI系统】选型常见问题解答二

本文主要总结BI系统选型过程中遇见的常见问题,并针对性做出回答,希望能为即将选型,或正在选型BI系统的企业用户们提供一个快速了解通道。 有针对金蝶云星空的BI方案吗?能起到怎样的作用? 答:奥威BI系统拥…

小内存嵌入式设备软件的差分升级设计(学习)

摘要 提出一种改进HDiffPatch算法并在复旦微单片机上实现小内存差分升级的方案,即使用单片机内的Flash空间替代算法占用的RAM空间,从而减少算法对单片机RAM空间的需求,以满足小内存微处理器的差分升级,同时对算法内存分配释放函数…

关于pycharm安装出现的interpreter field is empty,无法创建项目存储位置

关于pycharm安装出现的interpreter field is empty(解释器为空) 关于pycharm安装出现的interpreter field is empty,无法创建项目存储的位置。如图: 我之前安装的时候一直老是有这个提示,后来才发现是因为没安装这个p…

干货满满的Python知识,学会这些你也能成为大牛

目录 1. 爬取网站数据 2. 数据清洗与处理 3. 数据可视化 4. 机器学习模型训练 5. 深度学习模型训练 6. 总结 1. 爬取网站数据 在我们的Python中呢,使用爬虫可以轻松地获取网站的数据。可以使用urllib、requests、BeautifulSoup等库进行数据爬取和处理。以下是…

案例12 Spring MVC入门案例

网页输入http://localhost:8080/hello&#xff0c;浏览器展示“Hello Spring MVC”。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case12-springmvc01。 2.配置Maven依赖 <?xml version"1.0" encoding"UTF-8"?><project xm…

nacos原理

不要纠结于具体代码&#xff0c;随着版本变化源码多变&#xff0c;要学习的是基本原理和思想&#xff1b; Nacos注册中心实现原理分析 Nacos架构图 其中分为这么几个模块&#xff1a; Provider APP&#xff1a;服务提供者。 Consumer APP&#xff1a;服务消费者。 Name Serv…

k8s之StorageClass(NFS)

一、前言 1、环境 k8s v1.23.5 &#xff0c;服务器是centos7.9 192.168.164.20 k8s-master1 192.168.164.30 k8s-node1 192.168.164.40 k8s-node2 2、貌似storageClass在kubernetes v1.20就被砍了。 因为它比较慢&#xff0c;而且耗资源&#xff0c;但可以通过不同的实现镜…

Java并发机制的底层实现原理

一、前置知识 缓存一致性协议&#xff1a;每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了&#xff0c;当处理器发现自己缓存行对应的内存地址被修改&#xff0c;就会将当前处理器的缓存行设置成无效状态&#xff0c;当处理器对这个数据进行修改操作的时…

selenium常见等待机制及其特点和使用方法

目录 1、强制等待 2、隐式等待 3、显示等待 1、强制等待 强制等待是在程序中直接调用Thread.sleep(timeout) ,来完成的&#xff0c;该用法的优点是使用起来方便&#xff0c;语法也比较简单&#xff0c;缺点就是需要强制等待固定的时间&#xff0c;可能会造成测试的时间过…

“探索计算机世界:进程的基本概念与功能“

文章目录 前言什么是进程如何描述进程进程的属性1. 进程标识符2. 内存指针3. 文件描述符表4. 进程的状态5. 优先级6. 上下文7. 记账信息 内存分配并行和并发 前言 作为程序员&#xff0c;理解计算机的组成以及计算机是怎样运行的是很重要的&#xff0c;因为只有了解计算机我们…