当前位置: 首页 > news >正文

C++(Qt)软件调试---VS性能探查器(27)


文章目录

    • @[toc]
    • 1 概述🐜
    • 2 VS工具说明
      • 2.1 使用场景
      • 2.2 工具适用项目
    • 3 CPU使用率
    • 4 内存分析
      • 4.1 调试模式下分析内存
      • 4.2 非调试模式下分析内存
    • 5 相关地址🐐

更多精彩内容
👉内容导航 👈
👉C++软件调试 👈

1 概述🐜

软件开发中程序性能优化、性能瓶颈排查对开发人员来说是必不可少的技能。

常见的性能优化包括CPU使用率、内存使用率、内存泄漏、文件IO等。

linux下的perf工具功能非常强大,但是可惜不支持Windows;而windows中VS也提供了类似的工具,本文主要讲解VS性能探查器常用工具的基本使用和注意事项。

Visual Studio的性能探查器是开发人员用于检测和优化应用程序性能的重要工具。

不同版本的VS提供的性能探查器有一定区别,旧版本的VS中性能探查器包含的工具种类要少一些。

性能探查器中提供的工具包括:

  • CPU 使用率
  • .NET 对象分配
  • 内存使用率
  • 检测
  • .NET Async 工具
  • 文件 I/O
  • .NET 计数器
  • 数据库工具
  • GPU 使用情况

VS提供的这些工具其中部分适用于C++程序开发,部分不适应。

演示环境:

环境版本
系统Windows11
IDEVS2017、VS2022

2 VS工具说明

2.1 使用场景

性能工具说明何时使用此工具?
CPU 使用率显示 CPU 耗用时间的位置。• 开始调查一般的性能问题。
• 调查高服务器 CPU 使用率。
• 调查 DevOps 场景,例如订单无法发送到零售网站的情况。
• 优化 CPU 使用率。
• 调查 API 调用中的延迟。
火焰图在 CPU 使用率工具中查看,该工具提供调用树的备用可视化效果。调查 API 调用中的延迟
热路径在 CPU 使用率工具中查看,该工具显示应用程序耗用大部分 CPU 时间的位置。调查 API 调用中的延迟
内存使用率显示应用内存以查找内存泄漏等问题。• 优化内存使用情况
• 调查 UI 冻结
• 调查可疑内存泄漏(本机代码)
.NET 对象分配显示 .NET 对象的分配位置以及有关垃圾回收的信息。• 优化 .NET 内存使用情况
• 分析垃圾回收
检测显示确切的调用计数和调用时间。• 需要类似于 CPU 使用率的工具,但希望根据壁挂时钟时间确定在函数中花费的确切调用计数和时间。
• 你希望确定被阻止的时间,例如等待锁所用的时间。
• 注意:此工具需要额外的开销。
文件 I/O显示文件 I/O 操作以及它们花费的时间和要处理的数据量。调查 UI 冻结
性能提示显示与代码交互时性能信息的快速度量。调试时,你希望查看上一步操作(或断点)到当前步骤或断点之间的运行时间。
事件查看器显示 HTTP 请求、日志消息和异常。• 调查 API 调用中的延迟
• 调查远程 Web 服务器上运行缓慢的应用程序
.NET Async显示 .NET 应用中的异步/await 使用情况。调查怀疑异步代码存在的性能问题。
.NET 计数器.NET 计数器的实时报告。• 开始调查常规性能问题。
• 需要跟踪基于 .NET 计数器的指标,例如每秒异常数、垃圾回收和 CPU 利用率。
Database显示数据库查询性能。调查使用 ADO.NET 或 Entity Framework Core 的数据库查询的性能。
GPU 使用情况显示 Direct3D 应用的高级硬件使用情况。检查应用性能是受 CPU 限制还是受 GPU 限制。
应用程序时间线显示 XAML 应用的 UI 性能。调查 XAML 应用中的 UI 性能,例如呈现帧所用的时间。
IntelliTrace调试器工具可用于记录事件,并检查应用程序在不同执行点的状态。你需要一个工具来检查应用程序在不同点的状态,而不仅仅是当前应用程序状态。

2.2 工具适用项目

性能工具.NETC/C++UWPASP.NET/ASP.NET Core
CPU 使用率
内存使用率
.NET 对象分配
检测
文件 I/O
性能提示
事件查看器
.NET Async
.NET 计数器是(仅限 .NET Core/5 及更高版本)是(仅限 ASP.NET Core)
Database是(仅限 .NET Core/5 及更高版本)是(仅限 ASP.NET Core)
GPU 使用情况
应用程序时间线是 (XAML)
性能资源管理器
IntelliTrace仅适用于带有 Visual Studio Enterprise 的 .NET仅适用于带有 Visual Studio Enterprise 的 .NET仅适用于带有 Visual Studio Enterprise 的 .NET

3 CPU使用率

  1. 创建一个工程,这里我创建的是一个Qt工程;

  2. 添加如下所示代码:

    #include "QtWidgetsApplication3.h"
    #include <vector>
    #include <list>using namespace std;void fun1()
    {vector<int> arr;for (int i = 0; i < 10000000; i++){arr.push_back(i);}
    }void fun2()
    {list<int> arr;for (int i = 0; i < 10000000; i++){arr.push_back(i);}
    }
    void fun3()
    {vector<int> arr;arr.reserve(10000000);for (int i = 0; i < 10000000; i++){arr.push_back(i);}
    }QtWidgetsApplication3::QtWidgetsApplication3(QWidget *parent): QWidget(parent)
    {ui.setupUi(this);fun1();fun2();fun3();
    }QtWidgetsApplication3::~QtWidgetsApplication3()
    {}
  3. 选择【Debug】模式,【调试】【性能探查器】或者直接按快捷键【Alt + F2】打开;

    • 如果是【Release】模式,需要选择项目,右键【属性】【链接器】【调试】,将生成调试信息项选为【生成调试信息 (/DEBUG)】,用于生成pdb符号表,否则测试结果没办法看。

    在这里插入图片描述

    在这里插入图片描述

  4. 勾选【CPU使用率】,然后点击【开始】按键;

    在这里插入图片描述

  5. 编译运行起来后就开始检测CPU使用率了,当需要停止检测时直接退出程序或者点击【停止收集】就能自动生成分析结果了;

  6. 如下图所示可以看出在【热路径】栏中CPU占用高的函数为fun2(),或者点击【打开详细信息】更容易观看;

    在这里插入图片描述

  7. 如下图所示,可选择【调用方/被调用方】、【调用树】、【模块】、【函数】、【火焰图】几种显示视图;

    • 点击调用方三个矩形模块可以切换调用函数;
    • 调用树适用于函数调用栈不深的情况,对于Qt开发的程序一般函数调用栈都比较深,使用调用树视图很不方便观看;
    • 模块视图可适用于分析使用到的动态库性能;
    • 使用较多的是函数视图,可以直接看哪个函数CPU占用高,然后双击函数名打开所在代码;
    • 火焰图是CPU性能分析常见视图,在使用perf时常常使用火焰图,但是在VS2022中才有,旧版本的VS没有火焰图。

    在这里插入图片描述

  8. 鼠标在生成的报告上右键可以选择保存报告,最好将此时的代码、可执行程序、pdb符号表保存到一起,用于后续回看。

    在这里插入图片描述

  9. 如同所示可分析不同线程的CPU占用率。

    在这里插入图片描述

  10. 如下图所示,在不同视图中鼠标右键打开菜单可以切换使用其它视图显示。

    在这里插入图片描述

  11. 使用火焰图时如下所示,纵轴为函数调用堆栈,横轴为函数占用CPU时长,函数执行越耗时,越宽。

    在这里插入图片描述

4 内存分析

使用内存分析工具可以分析C++程序出现的内存泄露等问题。

4.1 调试模式下分析内存

例如控制台程序,可能运行后立即就退出了,这种情况就需要使用调试模式来分析内存泄漏。

注意:

  1. 最好使用debug模式,如果使用release模式那就需要设置生成pdb符号表。
  2. vs的内存分析工具不使用于大型项目,并且对程序性能影响较大,执行过程中会在C:\Users\MHF\AppData\Local\Temp文件夹中生成大量数据,几分钟可能就几个G或者几十个G,所以如果C盘内存不足也会导致分析失败或者分析速度非常慢。
  1. 创建一个C++工程,代码如下所示:

    #include <iostream>void fun()
    {int* p = new int[10000];for (int i = 0; i < 10000; i++){p[i] = i;}
    }void fun1()
    {int* p = new int[10000];for (int i = 0; i < 10000; i++){p[i] = i;}delete[] p;
    }
    int main()
    {for (int i = 0; i < 100; i++){fun();fun1();}return 0;
    }
    
  2. 如图所示,在需要分析内存的代码段前后打上断点,然后按F5开始调试;

    在这里插入图片描述

  3. 如图所示,在命中第一个断点后,进入【诊断工具】,选择【内存使用率】,点击【堆分析】;

    在这里插入图片描述

  4. 然后点击【截取快照】,就会生成内存镜像;

    在这里插入图片描述

  5. 再按F5继续执行,命中第二个断点,然后点击【截取快照】就会生成第二个内存快照;

    在这里插入图片描述

  6. 可以看出第二个内存快照相对于第一个出现了内存增长;

  7. 双击第二个内存快照;就会出现内存使用窗口;

    在这里插入图片描述

  8. 然后双击使用的内存项,就会出现分配内存的堆栈,如下所示,在fun函数中,文件第8行分配的内存出现内存泄漏;

    在这里插入图片描述

4.2 非调试模式下分析内存

  1. 创建一个Qt程序;添加一个PushButton,在按键槽函数中分配内存不释放;

    在这里插入图片描述

  2. 然后点击【调试】【性能探查器】;

    在这里插入图片描述

  3. 勾选【内存使用率】,点击【开始】;

    在这里插入图片描述

  4. 如下所示,程序启动后,点击【截取快照】,然后点击操作程序分配内存,再次点击【截取快照】,点击【停止收集】或者直接退出程序,当生成分析报告后可看出第二层快照存在内存增长,点击第二层快照就可以看见内存泄漏的堆栈位置了。

    在这里插入图片描述

5 相关地址🐐

  • VS2017性能分析器
  • VS2019性能探查器
  • VS2022性能探查器


相关文章:

C++(Qt)软件调试---VS性能探查器(27)

文章目录 [toc]1 概述&#x1f41c;2 VS工具说明2.1 使用场景2.2 工具适用项目 3 CPU使用率4 内存分析4.1 调试模式下分析内存4.2 非调试模式下分析内存 5 相关地址&#x1f410; 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;C软件调试 &#x1f448; 1 概述…...

Spring源码_05_IOC容器启动细节

前面几章&#xff0c;大致讲了Spring的IOC容器的大致过程和原理&#xff0c;以及重要的容器和beanFactory的继承关系&#xff0c;为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的&#xff0c;接下来的每一章都是从总体脉络中&#xff0c; 去研究之前没看的一些重要…...

【c语言】简单的c程序设计

内存 1byte8bit 1KB1024byte 1MB1024byte 1G1024MB 1T1024G 变量 变量可以由数字、字母和下划线组成且不能以数字开头任何不满足条件的变量都是非法变量&#xff0c;如含有特殊字符的变量等变量不能含有空白字符&#xff0c;如空格、换行符等变量区分大小写变量不能是c语言…...

k8s dashboard可视化操作界面的安装

一、官方安装方法 根据官网的安装配置可以选择如下安装&#xff1a; kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 二、添加阿里云加速进行安装 #修改recommended.yaml拉取镜像的链接 vim recommended.yam…...

鸿蒙项目云捐助第三十一讲云捐助项目云前台显示商品列表

鸿蒙项目云捐助第三十一讲云捐助项目云前台显示商品列表 前面完成了云数据库后台的商品批量添加&#xff0c;这里需要把数据放在分类导航页面中显示。 一、云前台显示商品列表 这里需要把商品列表显示在MyNavSliderBar的组件中,MyNavSliderBar组件是通过首页路由实现的,在项…...

【rustdesk】客户端和服务端的安装和部署(自建服务器,docker,远程控制开源软件rustdesk)

【rustdesk】客户端和服务端的安装和部署&#xff08;自建服务器&#xff0c;docker&#xff09; 一、官方部署教程 https://rustdesk.com/docs/zh-cn/client/mac/ 官方服务端下载地址 https://github.com/rustdesk/rustdesk-server/releases 我用的docker感觉非常方便&am…...

Flink源码解析之:如何根据算法生成StreamGraph过程

Flink源码解析之&#xff1a;如何根据算法生成StreamGraph过程 在我们日常编写Flink应用的时候&#xff0c;会首先创建一个StreamExecutionEnvironment.getExecutionEnvironment()对象&#xff0c;在添加一些自定义处理算子后&#xff0c;会调用env.execute来执行定义好的Flin…...

【Spring MVC 核心机制】核心组件和工作流程解析

在 Web 应用开发中&#xff0c;处理用户请求的逻辑常常会涉及到路径匹配、请求分发、视图渲染等多个环节。Spring MVC 作为一款强大的 Web 框架&#xff0c;将这些复杂的操作高度抽象化&#xff0c;通过组件协作简化了开发者的工作。 无论是处理表单请求、生成动态页面&#x…...

2、Bert论文笔记

Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调&#xff08;预训练下游策略&#xff09; 3、模型架构4、输入/输出1.输入&#xff1a;2.输出&#xff1a;3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…...

hadoop搭建

前言 一般企业中不会使用master slave01 slave02来命名 vmware创建虚拟机 打开vmware软件&#xff0c;新建虚拟机 典型 稍后安装系统 选择centos7 虚拟机名称和安放位置自行选择&#xff08;最小化安装消耗空间较少&#xff09; 默认磁盘大小即可 自定义硬件 选择centos7的i…...

19_HTML5 Web Workers --[HTML5 API 学习之旅]

HTML5 Web Workers 是一种允许 JavaScript 在后台线程中运行的技术&#xff0c;从而不会阻塞用户界面或其他脚本的执行。通过使用 Web Workers&#xff0c;你可以执行复杂的计算任务而不影响页面的响应速度&#xff0c;提升用户体验。 Web Workers 的特点 Web Workers 是 HTM…...

【PCIe 总线及设备入门学习专栏 5.1 -- PCIe 引脚 PRSNT 与热插拔】

文章目录 OverviewPRSNT 与热插拔PRSNT 硬件设计 Overview Spec 定义的热插拔是把一个PCIe卡&#xff08;设备&#xff09;从一个正在运行的背板或者系统中插入/或者移除。这个过程需要不影响系统的其他功能。插入的新的设备可以正确工作。 显然&#xff0c;这里面需要考虑的问…...

使用docker compose安装gitlab

使用docker compose安装gitlab GitLab简介设置GITLAB_HOME路径创建docker挂载目录获取可用的GitLab版本编写docker-compose.yml文件启动docker基础配置 GITLAB_OMNIBUS_CONFIG修改配置 中文设置数据库配置系统邮箱配置 GitLab简介 GitLab是一个基于Git的开源项目&#xff0c…...

性能中 UV、PV 和并发量的关系

在性能测试中&#xff0c;UV&#xff08;独立访客数&#xff09;、PV&#xff08;页面浏览量&#xff09;和并发量是重要的指标&#xff0c;用于评估系统的负载能力。它们之间关系紧密&#xff0c;需要通过合理的计算和示例进行说明。 1. 概念解析 UV&#xff08;Unique Visito…...

Go语言zero项目服务恢复与迁移文档

## 一. 服务器环境配置 在迁移和配置 项目时&#xff0c;首先需要确保服务器环境正确配置。以下是配置步骤&#xff1a; ### 1. 安装 Go 语言环境 首先&#xff0c;确保 Go 语言环境已经安装&#xff0c;并且配置正确。执行以下步骤&#xff1a; # 下载 Go 语言安装包 wge…...

Redis - Token JWT 概念解析及双token实现分布式session存储实战

Token 定义&#xff1a;令牌&#xff0c;访问资源接口&#xff08;API&#xff09;时所需要的资源凭证 一、Access Token 定义&#xff1a;访问资源接口&#xff08;API&#xff09;时所需要的资源凭证&#xff0c;存储在客户端 组成 组成部分说明uid用户唯一的身份标识time…...

QT中使用OpenGL function

1.前言 QT做界面编程很方便&#xff0c;QTOpenGL的使用也很方便&#xff0c;因为QT对原生的OpenGL API进行了面向对象化的封装。 如&#xff1a; 函数&#xff1a;initializeOpenGLFunctions()...... 类&#xff1a;QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShader…...

STM32-笔记18-呼吸灯

1、实验目的 使用定时器 4 通道 3 生成 PWM 波控制 LED1 &#xff0c;实现呼吸灯效果。 频率&#xff1a;2kHz&#xff0c;PSC71&#xff0c;ARR499 利用定时器溢出公式 周期等于频率的倒数。故Tout 1/2KHZ&#xff1b;Ft 72MHZ PSC71&#xff08;喜欢设置成Ft的倍数&…...

MAC M4安装QT使用国内镜像源在线安装

MAC M4安装QT使用国内镜像源在线安装 一、下载安装包1. 访问[https://www.qt.io/](https://www.qt.io/)下载在线安装包2. 下载结果 二、创建QT账户&#xff0c;安装的时候需要三、安装1. 终端打开安装包2. 指定安装源3. 运行安装完的QT 一、下载安装包 1. 访问https://www.qt.…...

go语言中zero框架项目日志收集与配置

在 GoZero 项目中&#xff0c;日志收集和配置是非常重要的&#xff0c;尤其是在分布式系统中&#xff0c;日志可以帮助开发人员追踪和排查问题。GoZero 提供了灵活的日志系统&#xff0c;能够方便地进行日志的配置和管理。 以下是如何在 GoZero 项目中进行日志收集与配置的基本…...

springboot496基于java手机销售网站设计和实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本手机销售网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…...

iClient3D for Cesium在Vue中快速实现场景卷帘

作者&#xff1a;gaogy 1、背景 iClient3D for Cesium是由SuperMap提供的一个前端3D地图客户端&#xff0c;提供了丰富的功能与接口&#xff0c;使得开发者能够在Web应用中快速集成并展现3D地理信息。而在Vue框架中集成iClient3D&#xff0c;不仅可以利用Vue的响应式特性提高开…...

Elasticsearch-索引的批量操作

索引的批量操作 批量查询和批量增删改 批量查询 #批量查询 GET product/_search GET /_mget {"docs": [{"_index": "product","_id": 2},{"_index": "product","_id": 3}] }GET product/_mget {"…...

TVS二极管选型【EMC】

TVS器件并联在电路中&#xff0c;当电路正常工作时&#xff0c;他处于截止状态&#xff08;高阻态&#xff09;&#xff0c;不影响线路正常工作&#xff0c;当线路处于异常过压并达到其击穿电压时&#xff0c;他迅速由高阻态变为低阻态&#xff0c;给瞬间电流提供一个低阻抗导通…...

反编译APK获取xml资源

第一步去官网下载 jar 包 最新的即可 apktool官网下载地址 下载好重命名一下 改成 apktool.jar 第二步将你的 apk 和 jar 包放在同一个文件夹下面 第三步在该文件夹下打开 命令行 并输入 java -jar apktool.jar d 测试.apk回车后会正在解析 解析完成后&#xff0c;文件夹下…...

C++ 设计模式:装饰模式(Decorator Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 桥接模式 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。装饰模式通过创建一个装饰类来包装原始类&…...

排序算法之快速排序、归并排序

目录 快速排序归并排序的意义 快速排序 思维步骤 具体思想 测试样例解释 代码实现 归并排序 思维步骤 具体思想 测试样例解释 代码实现 快速排序归并排序的意义 快速排序和归并排序不仅仅是一种方法&#xff0c;更重要的是其作为一种算法而节省时间&#xff0c;在…...

一文读懂变分自编码(VAE)

一文读懂变分自编码(VAE) 概述 变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09;是一种生成模型&#xff0c;用于学习数据的潜在表示并生成与原始数据分布相似的新数据。它是一种概率模型&#xff0c;通过结合深度学习和变分推断的思想&#xff0c;解决了传…...

【每日学点鸿蒙知识】webview性能优化、taskpool、热更新、Navigation问题、调试时每次都卸载重装问题

1、HarmonyOS webview页面第二次&#xff0c;第三次打开感觉和第一次打开速度差不多&#xff0c;有优化吗&#xff0c;或者有没有webview秒开方案之类的&#xff1f; 目前没有webview秒开的方案&#xff0c;针对web场景的优化参考一下文档&#xff1a;https://developer.huawe…...

周记-唐纳德的《计算机程序设计艺术》

用代码生成代码 开发一个协议&#xff0c;字段有些多&#xff0c;每个字段是QT的属性&#xff0c;需要写Q_PROPERTY&#xff0c;一个一个编辑的话比较繁琐&#xff0c;耗费时间。后来就用代码生成了头文件和源文件&#xff0c;get和set还有signal函数&#xff0c;内容基本都是…...

AR 模型的功率谱

功率谱密度&#xff08;Power Spectral Density, PSD&#xff09;的表达式是从信号的自相关函数和系统的频率响应推导出来的&#xff0c;特别是对于 AR&#xff08;Auto-Regressive&#xff0c;自回归&#xff09;模型。以下是推导的过程&#xff1a; 1. AR 模型的定义&#xf…...

抖音小程序登录(前端通过tt.login获取code换取openId)

抖音小程序登录 抖音开放平台小程序登录&#xff1a; https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/tutorial/basic-ability/microapp-login 前端(通过tt.login获取code) 流程 静默登录依赖小程序 API tt.login&#xff0c;把tt.loginsuccess 回调…...

Linux 更改Jenkins使用其他账户启动

Linux 更改Jenkins使用其他账户启动 步骤一&#xff1a;修改 Jenkins 配置文件1. 编辑 Jenkins 的 systemd 服务文件&#xff1a;2. 在编辑器中添加以下内容&#xff1a;3. 保存并退出编辑器 步骤二&#xff1a;更改 Jenkins 目录的权限步骤三&#xff1a;重新加载 systemd 配置…...

117.【C语言】数据结构之排序(选择排序)

目录 1.知识回顾 2.分析 设想的思路 代码 执行结果 ​编辑 错误排查和修复 详细分析出错点 执行结果 3.正确的思路 4.其他问题 1.知识回顾 参见42.5【C语言】选择排序代码 点我跳转 2.分析 知识回顾里所提到的文章的选择排序一次循环只比一个数字,和本文接下来要…...

读书系列2024

认知类 1、《人生没有太晚的开始》&#xff1a; 作者摩西奶奶。 书中经典语录&#xff1a;“与其着急忙慌地不知从何开始&#xff0c;不如一切都慢慢来&#xff0c;开始并坚持了&#xff0c;总会有结果的那一天。喜欢一件事&#xff0c;你就慢慢去做吧。” 2、《忏悔录》托尔…...

如何快速又安全的实现端口转发【Windows MAC linux通用】

背景 有很多程序是在虚拟机上运行的&#xff0c;返回的url 又是127.0.0.1。在个人电脑上调试需要解决这个问题。端口转发是一个不错的方法 可能的解决办法&#xff1a; 1.修改程序&#xff0c;返回虚拟机的ip &#xff08;要改代码&#xff0c;换虚拟机还要再改代码&#xf…...

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画&#xff0c;让我们的角色动了起来&#xff0c;这一切变得比较有意思了起来。不过我们发现&#xff0c;角色虽然说是动了起来&#xff0c;不过只是在不停地原地踏步而已&#xff0c;而且我们也没有办法通过键盘来控制这个角色来进行移动…...

51单片机学习笔记——找不到REG52.H头文件,点亮一个LED

创建工程 将STC型号导入keil并使用 STC可以从官网下载&#xff0c;也可我这的网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bO85DPN3IFaXGhiKSwyOrA?pwd7f4h 提取码&#xff1a;7f4h 打开STC&#xff0c;选择“keil仿真设置”&#xff0c;选择“添加型号和头…...

07 基于OpenAMP的核间通信方案

引言 ZYNQ7020有两个CPU核心&#xff0c;这两个核心可以采用SMP或AMP方式进行调度&#xff0c;当采用AMP方式进行调度时核0和核1可以运行不同的操作系统&#xff0c;如核0运行Linux系统&#xff0c;提供有些复杂的用户交互工作&#xff0c;核1运行实时操作系统&#xff0c;对设…...

Ubuntu升级ssh版本到9.8

方案一&#xff1a;实测只有8.9有漏洞不推荐 1、更新软件包列表 sudo apt update 2、查找可用版本 apt-cache policy openssh-server 3、 选择版本 sudo apt install openssh-server1:9.8p1-<具体版本号> 4、 重启 sudo systemctl restart ssh 5、验证版本 /usr/sbin/ss…...

git设置项目远程仓库指向github的一个仓库

要将你的Git项目设置为指向GitHub上的远程仓库&#xff0c;你需要执行以下步骤&#xff1a; 创建GitHub仓库&#xff1a; 登录到你的GitHub账户。点击右上角的 “” 号&#xff0c;选择 “New repository” 创建一个新的仓库。填写仓库的名称&#xff0c;可以添加描述&#xff…...

【实战示例】面向对象的需求建模

前言 博主准备写一个以面向对象为核心思想的软件需求建模、领域建模的系列&#xff0c;总结一整套可落地的DDD的打法&#xff0c;前面几篇文章论述了如何进行面向对象的需求建模&#xff0c;本文将以一个简单的购物商城的需求来演示如何进行面向对象的需求建模。 面向对象的需…...

平方数的判断不用sqrt()函数

//判断一个数是不是平方数&#xff0c;13…&#xff08;2*m-1&#xff09;m*mn #include<stdio.h> int main(){ int n; scanf("%d",&n); int i; for(i1;n>0;i2){ nn-1; } if(n0){ printf("YES!\n"); …...

node.js之---回调函数

什么是回调函数&#xff1f; 为什么会有回调函数&#xff1f; 回调函数的特性 回调函数的应用场景 怎么解决回调地狱 什么是回调函数&#xff1f; 回调函数是一个函数&#xff0c;他作为参数传递给另外一个函数&#xff0c;并且会在另外一个函数执行完毕之后被调用&#…...

浏览器http缓存问题

一、什么是浏览器缓存 浏览器将请求过的资源&#xff08;html、js、css、img&#xff09;等&#xff0c;根据缓存机制&#xff0c;拷贝一份副本存储在浏览器的内存或者磁盘上。如果下一次请求的url相同时则根据缓存机制决定是读取内存或者磁盘上的数据还是去服务器请求资源文件…...

编写一个简单的引导加载程序(bootloader)

编写一个简单的引导加载程序&#xff08;bootloader&#xff09;通常用于嵌入式系统或自定义操作系统。这里&#xff0c;我将为你提供一个基于x86架构的简单汇编语言 bootloader 示例。这个 bootloader 将会在启动时打印一条消息到屏幕上。 使用 NASM 汇编器来编写这个 bootlo…...

Three.js 字体

在 Three.js 中&#xff0c;我们可以通过 FontLoader 加载字体&#xff0c;并结合 TextGeometry 创建 3D 文本。加载字体是因为字体文件包含了字体的几何信息&#xff0c;例如字体的形状、大小、粗细等&#xff0c;而 TextGeometry 则是根据字体信息生成 3D 文本的几何体。 在…...

Jenkins 构建流水线

在 Linux 系统上安装 Jenkins 服务&#xff0c;以及配置自动化构建项目 前置准备环境&#xff1a;docker、docker-compose、jdk、maven 一、环境搭建 1. Jenkins 安装 &#xff08;1&#xff09;拉取镜像 # 安装镜像包&#xff0c;默认安装最新版本 docker pull jenkins/jen…...

ES 磁盘使用率检查及处理方法

文章目录 1. 检查原因2. 检查方法3. 处理方法3.1 清理数据3.2 再次检查磁盘使用率 1. 检查原因 磁盘使用率在 85%以下&#xff0c;ES 可正常运行&#xff0c;达到 85%及以上会影响 PEIM 数据存储。 在 ES 磁盘分配分片控制策略中&#xff0c;为了保护数据节点的安全&#xff0…...

【回溯】LeetCode经典题目总结:组合、排列、子集、分割、N皇后、单词搜索

回溯 组合问题组合总和全排列子集分割回文串N皇后电话号码的字母组合单词搜索括号生成 组合问题 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 树形结构&#xff1…...