gdb和make工具

gdb工具:

GDB的主要功能

  1. 断点设置:允许开发者在特定的代码行设置断点,当程序执行到该行时会自动暂停,方便开发者进行调试和分析。

  2. 变量查看与修改:在程序运行过程中,可以查看和修改变量的值,以便了解程序的运行状态。

  3. 代码执行控制:可以单步执行代码(包括步入、步过、步出),也可以运行到特定行或函数,从而更细致地观察程序的执行过程。

  4. 回溯和堆栈查看:提供堆栈回溯功能,可以查看函数调用栈,了解函数调用顺序和当前执行的位置。

  5. 内存查看:可以查看程序的内存使用情况,包括读取和修改内存内容,有助于发现内存泄漏、越界等问题。

  6. 进程控制:可以启动、停止、继续、杀死被调试的程序,方便进行各种调试操作。

  7. 命令脚本:支持编写命令脚本,实现自动化调试过程,提高调试效率。

用法:(Linux)

gcc -g 文件名 -o 执行文件名

gdb 执行文件名------进入调试页面

l(list)-----默认看十行代码

r(run)-----跑程序代码

b(breakpoint)-----设置一个断点,代码运行到断点会停止

c(continue)------继续执行代码,到下一个断点

n(next)------一行一行的执行代码,但是不会进入函数

        首先设置一个断点,然后r跑程序,程序运行到断点停止,使用n接着往下一行一行执行代码,由图可以看出,当执行到我的自定义函数show之后再n执行下一行就到了return,并没有进入我的show函数。

s-----一行一行执行代码,但是会进入函数

 

       首先设置一个断点,然后r跑程序,程序运行到断点停止,使用s接着往下一行一行执行代码,由图可以看出, 当我执行到第19行我的自定义函数的时候,在s执行下一行它就会进入到我的自定义函数里面去一行一行执行;这里除了自定义的函数,库函数也会进入。

d 断点序号 ------删除对应序号的断点,如果d后面什么都不加,默认删除所有断点

p 变量名 -------输出变量名的值

        在断点之后使用n一行一行执行代码,当执行到循环时,使用p i就可以查看这一次循环i的值为多少,当我们执行代码发生错误或者死循环时就可以使用它来查看循环中哪里出了问题。

q -----退出gdb调试

make工具:

make工具是一个解释器 ,用来解释makefile文件,它会默认在当前路径下执行makefile或者Makefile

作用:节省大量时间,只会根据文件修改的时间戳的改变而编译对应的文件,没有改变的不会再重复编译

时间戳:文件最近一次修改的时间

常用makefile一般形式:

目标文件:依赖文件

(Tab空格)编译规则

目标文件:通过编译规则之后得到的文件

依赖文件:生成目标文件所需要编译的文件,如果没有依赖文件,会继续寻找生成依赖文件的依赖文件,直到找完所有依赖文件或者报错为止

gcc编译的四个步骤:

1、预处理,展开文件的头文件和宏定义

gcc -E 1.c -o 1.i

2、编译,检查语法错误

gcc -S 1.i -o 1.s

3、汇编,生成计算机能够识别的二进制文件

gcc -c 1.s -o 1.o

4、链接、生成最终执行文件

gcc 1.o -o a.out

例:

OBJS=huiwen.o my_rechar.o
cc=gcc
OBJS1=huiwen.c
OBJS2=my_rechar.c
TARGET1=huiwen.o
TARGET2=my_rechar.o

${TARGET}:${OBJS}
	${cc} ${OBJS} -o ${TARGET}
${TARGET1}:${OBJS1}
	${CC} -c ${OBJS1} -o ${TARGET1} 
${TARGET2}:${OBJS2}
	${cc} -c ${OBJS2} -o ${TARGET2}
clean:
	rm ${OBJS} ${TARGET}

#h:huiwen.o my_rechar.o
#	gcc huiwen.o my_rechar.o -o h
#huiwen.o:huiwen.c
#	gcc -c huiwen.c -o huiwen.o
#my_rechar.o:my_rechar.c
#	gcc -c my_rechar.c -o my_rechar.o
#clean:
#	rm huiwen.o my_rechar.o h

解析:这里的huiwen.c、my_rechar.c是功能函数和主函数,还有一个huiwen.h是放头文件的,下面带#号的就是一般写法,通过.o文件生成可执行文件,然后.o文件又是由.c文件生成,最后的clean是删除生成的.o文件,以便于我们更改之后重新make;上面的是通用的写法,用一个通用的变量名来代替可执行文件、目标文件和依赖文件,这样后续我们编译其他文件的时候只需要修改最前面变量的内容即可,就不需要再写一遍编译规则。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一周内从0到1开发一款 AR眼镜 相机应用?

目录 1. 📂 前言 2. 💠 任务拆分 2.1 产品需求拆分 2.2 开发工作拆分 3. 🔱 开发实现 3.1 代码目录截图 3.2 app 模块 3.3 middleware 模块 3.4 portal 模块 4. ⚛️ 拍照与录像 4.1 前滑后滑统一处理 4.2 初始化 View 以及 Came…

推荐一款功能强大的数据库开发管理工具:SQLite Expert Pro

SQLite Expert Professional是一个功能强大的工具,旨在简化SQLite3数据库的开发。 它是SQLite的一个功能丰富的管理和开发工具,旨在满足所有用户从编写简单SQL查询到开发复杂数据库的需求。 图形界面支持所有SQLite功能。 它包括一个可视化查询构建器&a…

C#与C++交互开发系列(十七):线程安全

前言 在跨平台开发和多线程编程中,线程安全是不可忽视的重要因素。C和C#中提供了各自的线程同步机制,但在跨语言调用中,如何确保数据一致性、避免数据竞争和死锁等问题,是开发人员必须考虑的重点。 本文将介绍在C#和C交互开发中确…

数据库SQL学习笔记

第 1 章 绪论 1.1 数据库系统概述 1.1.1 四个基本概念 数据库系统(DBS) 定义:是指在计算机系统中引入数据库后的系统构成 构成:数据库,数据库管理系统(及其开发工具),应用系统,数据库管理员…

Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着科技的飞速发展,人们的…

.net Core 使用Panda.DynamicWebApi动态构造路由

我们以前是通过创建controller来创建API,通过controller来显示的生成路由,这里我们讲解下如何不通过controller,构造API路由 安装 Panda.DynamicWebApi 1.2.2 1.2.2 Swashbuckle.AspNetCore 6.2.3 6.2.3添加ServiceAction…

[ 内网渗透实战篇-1 ] 单域环境搭建与安装域环境判断域控定位CS插件装载CS上线

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

还在使用ElementUI不如试一试DaisyUI,DaisyUI: Tailwind CSS 的高效组件库,

DaisyUI: Tailwind CSS 的高效组件库 daisyUI官网:https://daisyui.com/ 在现代网页开发中,快速构建美观且响应式的用户界面是每个开发者追求的目标。Tailwind CSS 是一个流行的实用程序优先的 CSS 框架,它允许开发者直接在 HTML 中使用预…

《大数据与人工智能:提升数据质量与数量的利器》

《大数据与人工智能:提升数据质量与数量的利器》 一、大数据与人工智能的融合趋势二、大数据增加数据数量的方法(一)不同途径的数据增量(二)数据增强的多样方法 三、人工智能提升数据数量的手段(一&#xf…

通义灵码实操—飞机大战游戏

通义灵码实操—飞机大战游戏 有没有想象过自己独立编写一个有趣的小游戏。在本实践课程中,你不仅可以实现这个想法,而且还将得到通义灵码智能编程助手的支持与指导。我们将携手步入编程的神奇世界,以一种简洁、高效且具有创造性的方式&#…

AI之硬件对比:据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D

AI之硬件对比:据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D 目录 Nvidia的显卡 Nvidia的5090/5080/4090/4080:据传传英伟达Nvidia RTX 5090后续推出32GB版且RTX 5080后续或推出24GB版 RTX 5090相较于RTX 4090&…

7.2 设计模式

设计模式 7.3.1 设计模式的要素7.3.2 创建型设计模式7.3.3 结构性设计模式1. Adapter (适配器)2. Bridge(桥接)3.Composite(组合)4.Decorator(装饰)5.Facade(外观)6.Flyweight(享元)7.Proxy(代理)8. 结构型模式比较 7.3.4 行为型设计模式1 Chain of Responsibility 责任链模式2…

狐假虎威,数据流图其实很简单

不同于类图、用例图和顺序图等等UML里面的概念,DFD数据流图术语结构化分析的范畴。它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程。 两句话来概括数据流图: 功能是用来描述整个系统中信息…

一周搞定模电!(2) 超详细!!新手小白必看!

目录 稳压二极管 整流二极管 开关二极管 电容 1、什么是电容 2、电容的作用 2.1 旁路的作用 2.2 去耦(退耦)电容的作用 2.3 滤波和储能 3.电容在电路中的连接问题 稳压二极管 嵌入式系统,作为一种专用计算机系统,被广泛…

CPU Study - Pipeline Basic

参考来源:《超标量处理器设计》—— 姚永斌 超标量处理器 一个程序执行时间的公式如下,而这个公式通常也反映了处理器的性能: 图中的CPI - Cycle Per Instruction也就是CPU每条指令需要的周期数量,CPI计算方法就是周期数量除以…

串口屏控制的自动滑轨(未完工)

序言 疫情期间自己制作了一个自动滑轨,基于无线遥控的,但是整体太大了,非常不方便携带,所以重新设计了一个新的,以2020铝型材做导轨的滑轨,目前2020做滑轨已经很成熟了,配件也都非常便宜&#x…

Python 自动化脚本集合:开源免费、跨平台、助你告别重复劳动、高效便捷完成各种任务!

引言 你是否也厌倦了重复繁琐的操作?让 Python-Geeks 的 Automation-scripts 库来替你完成重复工作!这个仓库汇聚了200多个各种实用且高效的 Python 脚本,可以自动执行各种任务,让你从繁重的劳动中解放出来,真正享受生…

A011-基于SpringBoot的视频点播系统设计与实现

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装视频点播系统软件来发挥其高效地信息处理的作用&#xff0c…

JAVA学习日记(十一) 常用API

一、Math //开平方根 public static double sqrt(double a); //返回结果 //开立方根 public static double cbrt(double a); 水题: public class Main {public static void main(String[] args) {//统计一共有多少个水仙花数 : abca^3b^3c^3abc// aabc/100%10//…

数据结构 —— 红黑树

目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1:变色 2.2.2 情况2:单旋变色 2.2…