gdb和make工具
gdb工具:
GDB的主要功能
-
断点设置:允许开发者在特定的代码行设置断点,当程序执行到该行时会自动暂停,方便开发者进行调试和分析。
-
变量查看与修改:在程序运行过程中,可以查看和修改变量的值,以便了解程序的运行状态。
-
代码执行控制:可以单步执行代码(包括步入、步过、步出),也可以运行到特定行或函数,从而更细致地观察程序的执行过程。
-
回溯和堆栈查看:提供堆栈回溯功能,可以查看函数调用栈,了解函数调用顺序和当前执行的位置。
-
内存查看:可以查看程序的内存使用情况,包括读取和修改内存内容,有助于发现内存泄漏、越界等问题。
-
进程控制:可以启动、停止、继续、杀死被调试的程序,方便进行各种调试操作。
-
命令脚本:支持编写命令脚本,实现自动化调试过程,提高调试效率。
用法:(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;上面的是通用的写法,用一个通用的变量名来代替可执行文件、目标文件和依赖文件,这样后续我们编译其他文件的时候只需要修改最前面变量的内容即可,就不需要再写一遍编译规则。
相关文章:

gdb和make工具
gdb工具: GDB的主要功能 断点设置:允许开发者在特定的代码行设置断点,当程序执行到该行时会自动暂停,方便开发者进行调试和分析。 变量查看与修改:在程序运行过程中,可以查看和修改变量的值,以…...

【d66】【Java】【力扣】174.寻找二叉搜索树中的目标节点
思路 反着的中序遍历,并计数 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNo…...

Spring Boot关闭时,如何确保内存里面的mq消息被消费完?
1.背景 之前写一篇文章Spring Boot集成disruptor快速入门demo,有网友留言如下图: 针对网友的留言,那么我们如何解决这个问题呢 Spring-Boot应用停机时,如何保证其内存消息都处理完成? 2.解决方法 方法其实挺简单的&…...

HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解
文章目录 1. 标题标签2. 段落标签3. 文本格式化标签4. 列表标签4.1 无序列表 `<ul>`4.2 有序列表 `<ol>`5. 引用标签5.1 块引用 `<blockquote>`5.2 行内引用 `<q>`5.3 作品引用 `<cite>`6. 代码和预格式文本标签6.1 代码标签 `<code>`6.2 …...

高效管理社团:Spring Boot在校园社团信息管理中的应用
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理校园社团信息管理系统的相关信息成为必然。…...

mysql约束和高级sql
约束 MySQL中的约束用于定义表中数据的规则,以确保数据的准确性和可靠性。以下是MySQL中常用的一些约束类型及其概述: PRIMARY KEY(主键):唯一标识表中每条记录的字段或字段组合, 一个表中只能有一个主键…...

蓝桥杯真题——三角回文数(C语言)
问题描述 对于正整数 n, 如果存在正整数 k 使得 n123⋯kk(k1)2n123⋯kk(k1)/2, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯36366066123⋯363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数…...

uni-app 封装图表功能
文章目录 需求分析1. 秋云 uchars2. Echarts 需求 在 uni-app 中使用图表功能,两种推荐的图表工具 分析 在 Dcloud市场 搜索Echarts关键词,会出现几款图表工具,通过大家的下载量,可以看到秋云这个库是比较受欢迎的,其…...

Kubernetes的基本构建块和最小可调度单元pod-0
文章目录 一,什么是pod1.1pod在k8s中使用方法(1)使用方法一(2)使用方法二 1.2pod中容器的进程1.3pod的网络隔离管理(1)pause容器的作用 1.4 Pod分类:(1)自主式…...

QT创建按钮篇
QT创建按钮篇 1.概述 这篇文章从创建一个按钮对QT开发流程熟悉。 2.代码 #include "mywidget.h" #include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent) { // 第一种创建按钮方式 // QPushButton *btn new QPushButton(); /…...

初级软件测试工程师就别出口喊15K了,连自动化测试都不会,还不如应届生
一. 为什么学软件测试 零基础转行,为什么首选软件测试? 软件测试是软件开发的重要过程之一,是软件质量的保证。国外信息技术领域软件开发人员与测试人员的比例是1:1,而国内目前专业软件测试人员很少,属于紧缺型人才&a…...

Mybatis查询数据库,返回List集合,集合元素也是List。
#有时间需求会要求:查询全校的学生数据,且学生数据按班级划分。那么就需要List<List<user>>类型的数据。 SQL语句 SELECT JSON_ARRAYAGG(JSON_OBJECT(name , name ,BJMC, BJMC ,BJBH,BJBH)) as dev_user FROM dev_user WHERE project_id …...

SQL 视图:概念、应用与最佳实践
SQL 视图:概念、应用与最佳实践 SQL(Structured Query Language)视图是数据库管理中的一个重要概念,它允许用户以虚拟表的形式查看数据。视图在数据库中并不实际存储数据,而是提供了一个查询结果的快照,这…...

ubuntu交叉编译expat库给arm平台使用
1.下载expat库源码: https://github.com/libexpat/libexpat/release?page=2 wget https://github.com/libexpat/libexpat/release/download/R_2_3_0/expat-2.3.0.tar.bz2 下载成功: 2.解压expat库,并进入解压后的目录: tar xjf expat-2.3.0.tar.bz2 cd expat-2.3.0 <…...

成都郝蓉宜恺文化传媒有限公司以诚信经营赢得客户长期信赖
成都郝蓉宜恺文化传媒有限公司秉承深厚的企业文化和价值观,其中“以诚信经营为本”是其核心理念之一。以下是对该公司如何以诚信经营为基础,赢得客户长期信赖的几点客观分析: 1.建立信任基石:在商业领域,信任是客户与企…...

LabVIEW for Linux 介绍
LabVIEW for Linux 介绍 1. 兼容性 LabVIEW for Linux 设计用于多种 Linux 发行版,包括 CentOS、Ubuntu 等。在安装之前,务必检查与您特定发行版版本的兼容性。 2. 程序移植 可移植性:在许多情况下,LabVIEW 程序(VI…...

一次32bit有符号数据类型转换为64bit无符号数据类型引发的溢出错误
现象: 在调试一款sensor,通过10帧->8帧->6帧,这样不断的降低帧率调试低照度下的图像效果。ISP配置文件上设置的最大曝光曝光参数为: EXP:15266 Again:15494 Dgain:714 ISPDGain:1360。 当达到最低帧率最低亮度时&#x…...

aosp安卓15新特性dump的wms窗口层级树优化的更加美观
背景: 近来在体验调试aosp15时候,使用了dumpsys activity containers时候,发现wms层级结构树有一个巨大的变化。 很多学员朋友对这个优化改进都给出巨大的点赞,有的学员朋友还想老版本自己实现一下这种树绘制: 对比…...

git的使用、router和route的区别以及v-show和v-if的差别
这里写目录标题 多人协作使用git的步骤(使用gitub)建立自己的空仓库连接远程仓库使伙伴可以使用仓库将代码拉入空仓库进行git指令的学习 router和route的区别router定义:用途: route定义:用途: v-show和v-i…...

Win系统通过命令行查看笔记本电池损耗/寿命/健康
在 Windows 10/11 系统中,可以通过指令查看笔记本电池的寿命情况,方法如下: 0,打开cmd/终端 键盘快捷键:Win R,然后输入cmd,点击【确定】 1,执行命令 在命令行中输入下面指令并按…...

【安当产品应用案例100集】029-使用安全芯片保护设备核心业务逻辑
我国工业企业普遍缺乏数据安全意识,对数据安全保护缺乏基本认识。这导致企业在数据安全方面的投入不足,保护能力基本不具备,难以有效应对数据安全风险。不过随着安全事件越来越多,很多工业企业的安全意识也越来越高,在…...

Redis高级篇之缓存一致性详细教程
文章目录 0 前言1.缓存双写一致性的理解1.1 缓存按照操作来分 2. 数据库和缓存一致性的几种更新策略2.1 可以停机的情况2.2 我们讨论4种更新策略2.3 解决方案 总结 0 前言 缓存一致性问题在工作中绝对没办法回避的问题,比如:在实际开发过程中,…...

C++ 文件操作详解
C 文件操作详解 在C中,文件操作分为文本文件和二进制文件的操作,通过文件流类(ifstream、ofstream、fstream)进行文件的读写。这些类封装了文件的输入和输出操作,并继承了istream和ostream的功能,使得流对…...

计算机网络:网络层 —— 边界网关协议 BGP
文章目录 路由选择协议动态路由协议边界网关协议 BGPBGP 的基本概念BGP-4 的四种报文 路由选择协议 因特网是全球最大的互联网,它所采取的路由选择协议具有以下三个主要特点: 自适应:因特网采用动态路由选择,能较好地适应网络状态…...

Python数据可视化seaborn
产品经理在做数据分析时可能需要通过可视化来分析。seaborn官网 1. relplot 散点图 https://seaborn.pydata.org/examples/scatterplot_sizes.html import pandas as pd import seaborn as sns df pd.DataFrame({x: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],y: [8, 6, 7, 8, 4, 6,…...

Java继承练习
构建Person类(属性:名字、年龄、工作岗位),创建三个对象,并且根据对象的年龄或名字长度来进行冒泡排序 package chapter08.homework.test01;public class homework01 {public static void main(String[] args) {Perso…...

Excel怎么转换成word?分享两种方法!
Excel文件想要转换成word文档中,直接粘贴复制的话,可能会导致表格格式错乱,那么如何转换才能够保证表格不错乱?今天分享两个方法,excel表格转换为word文件。 方法一: 首先打开excel表格,将表格…...

nignx代理获取真实地址request.getRequestURL()
# 反向代理配置到后端接口 location /prod-api/ { # proxy_set_header Host $proxy_host; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarde…...

登录注册窗口(二)
登录注册窗口(二) 前言 在上一集我们就完成了整个登录注册窗口的布局,我们为了能够点击那两个特殊的按钮,我们就要去连接他们的槽函数。那么我们就开始这一集的内容吧。 需求分析 为了能够切换手机号与用户名的注册登录以及注…...

go channel 通道
一、底层实现 1、数据结构 type hchan struct {qcount uint // total data in the queuedataqsiz uint // size of the circular queuebuf unsafe.Pointer // points to an array of dataqsiz elementselemsize uint16closed uint32timer *t…...