【c语言日寄】Vs调试——新手向
【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study
文章目录
- 前言
- 一、简单C问题的代码引入
- 二、什么是调试
- 调试的主要步骤包括:
- 三、Debug和Release版本的介绍与区别
- Debug版本
- Release版本
- Debug和Release版本的区别
- 四、调试的准备
- 五、调试快捷键的介绍
- 六、调试窗口的使用
- 七、定位问题代码
- 八、总结
前言
在软件开发过程中,编写代码只是第一步,更重要的是确保代码能够正确运行并满足需求。而调试(Debugging)是实现这一目标的关键环节。本文将通过一个简单的C语言问题引入,详细介绍VS2022的基本调试功能,包括Debug和Release版本的区别、调试的准备、调试快捷键、调试窗口的使用以及如何通过调试定位问题代码。无论你是初学者还是有一定开发经验的开发者,阅读本文都会带来收获~
一、简单C问题的代码引入
我们先来看一个简单的C语言程序。这个程序的目标是计算两个整数的和,并输出结果。然而,程序中存在一些问题,接下来,我们将通过调试来发现代码的错误。
#include <stdio.h>int add(int a, int b) {return a - b; // 这里故意写错了,应该是 a + b
}int main() {int num1 = 10;int num2 = 20;int result = add(num1, num2);printf("The result is: %d\n", result);return 0;
}
在这个程序中,add函数的实现是错误的,它返回的是两个数的差而不是和。
二、什么是调试
调试是指在软件开发过程中,通过一系列工具和技术手段,查找并修复代码中的错误(Bug)的过程。调试的目的是确保程序能够按照预期运行,输出正确的结果。调试不仅可以帮助我们发现程序中的逻辑错误,还可以帮助我们理解程序的执行流程,优化代码性能。
调试的主要步骤包括:
- 启动调试:通过IDE或调试工具启动程序的调试过程。
- 设置断点:在代码中设置断点,使程序在特定位置暂停执行。
- 单步执行:逐行或逐语句执行代码,观察程序的执行过程。
- 查看变量值:在调试过程中查看变量的值,分析程序状态。
- 分析调用堆栈:查看函数调用的顺序,定位问题的源头。
- 修复问题:根据调试结果,修改代码中的错误。
- 重复测试:修复问题后重新运行程序,确保问题得到解决。
调试是软件开发中不可或缺的一部分,它能够帮助我们快速定位问题,提高开发效率,确保软件质量。
三、Debug和Release版本的介绍与区别
在Visual Studio中,程序可以以两种模式编译:Debug模式和Release模式。这两种模式在编译和运行时的行为有显著差异。
Debug版本
Debug版本是用于调试的程序版本,它包含了许多调试信息,方便开发者在调试过程中查看程序的执行状态。Debug版本的主要特点包括:
- 调试信息:包含完整的调试信息,如变量名、函数名、源代码行号等,方便调试工具在运行时与源代码进行映射。
- 未优化代码:代码未经过优化,保持与源代码一致的执行顺序,方便单步执行和查看变量值.
- 断言支持:支持断言(Assert)功能,可以在运行时检查程序的逻辑错误。 内存管理:在Debug模式下,VisualStudio会为程序分配额外的内存保护,帮助检测内存泄漏和越界访问等问题。
Release版本
Release版本是用于发布的程序版本,它经过了优化,以提高程序的运行效率和性能。Release版本的主要特点包括:
- 优化代码:对代码进行了优化,包括指令优化、循环展开、内联函数等,以提高程序的运行速度。
- 无调试信息:不包含调试信息,减小程序的体积,提高运行效率。 断言禁用:默认情况下禁用了断言功能,以避免对性能的影响。
- 内存管理:不包含额外的内存保护,因此在Release模式下可能无法检测到某些内存问题。
Debug和Release版本的区别
特性 | Debug版本 | Release版本 |
---|---|---|
调试信息 | 包含完整调试信息 | 不包含调试信息 |
代码优化 | 未优化,保持与源代码一致 | 优化,提高运行效率 |
断言支持 | 支持断言 | 默认禁用断言 |
内存管理 | 包含额外的内存保护 | 不包含额外的内存保护 |
程序体积 | 较大 | 较小 |
运行速度 | 较慢 | 较快 |
内存对比
在开发过程中,我们通常使用Debug版本进行调试,修复问题后,再切换到Release版本进行发布。了解Debug和Release版本的区别,可以帮助我们更好地选择合适的模式进行开发和调试。
四、调试的准备
在使用VS2022进行调试之前,我们需要进行一些准备工作,以确保调试环境的正确配置。
- 创建项目
首先,我们需要创建一个新的项目。在VS2022中,选择“创建新项目”,选择C语言项目模板(如“控制台应用程序”),并填写项目名称和路径。 - 编写代码
在项目中编写需要调试的代码。例如,我们可以将前面提到的简单C程序复制到项目中。 - 配置调试模式
确保项目配置为Debug模式。在VS2022中,可以通过工具栏上的配置管理器选择Debug模式。 - 设置断点
在代码中设置断点,使程序在特定位置暂停执行。设置断点的方法是:将光标移动到需要暂停的代码行,然后按F9键或右键选择“切换断点”。断点设置成功后,该行代码会显示一个红点。
在我们的示例程序中,我们可以在add函数和printf语句处设置断点。
五、调试快捷键的介绍
VS2022提供了丰富的调试快捷键,帮助开发者快速进行调试操作。掌握这些快捷键可以大大提高调试效率。以下是一些常用的调试快捷键:
- 启动调试
F5:开始调试并运行程序。如果程序中设置了断点,程序会在第一个断点处暂停。
Ctrl + F5:运行程序而不启动调试。这通常用于测试Release版本。 - 暂停和停止调试
Shift + F5:停止调试,退出调试模式。
Ctrl + Break:暂停正在运行的程序。 - 单步执行
F10:逐过程执行代码(Step Over)。执行当前语句,但不进入函数内部。
F11:逐语句执行代码(Step Into)。执行当前语句,如果当前语句是函数调用,则进入函数内部。
Shift + F11:跳出当前函数(Step Out)。从当前函数返回到调用它的函数。 - 查看变量值
Ctrl + Alt + V, A:打开“局部变量”窗口,查看当前作用域内的变量值。
Ctrl + Alt + V, F:打开“监视”窗口,添加并查看特定变量的值。 - 调用堆栈
Ctrl + Alt + C:打开“调用堆栈”窗口,查看函数调用的顺序。 - 其他快捷键
Ctrl + Shift + F9:清除所有断点。
Ctrl + F9:设置或清除断点。
掌握这些调试快捷键,可以帮助我们更高效地进行调试操作,快速定位和解决问题。
六、调试窗口的使用
VS2022提供了多种调试窗口,帮助开发者在调试过程中查看程序的执行状态和相关数据。以下是一些常用的调试窗口及其使用方法:
- 监视窗口
监视窗口用于查看和修改变量的值。在调试过程中,可以通过以下步骤使用监视窗口:
- 打开监视窗口:在调试过程中,通过菜单栏选择“调试”->“窗口”->“监视”->“监视1”。
- 添加变量:在监视窗口中输入变量名,按回车键,即可查看该变量的值。
- 修改变量值:在监视窗口中直接修改变量的值,可以观察程序的行为变化。
在我们的示例程序中,我们可以在监视窗口中添加num1、num2和result变量,观察它们的值在程序运行过程中的变化。
- 内存窗口
内存窗口用于查看和修改内存中的数据。在调试过程中,可以通过以下步骤使用内存窗口:
- 打开内存窗口:在调试过程中,通过菜单栏选择“调试”->“窗口”->“内存”->“内存1”。
- 查看内存数据:在内存窗口中输入内存地址或变量名,可以查看该地址或变量对应的内存数据。
- 修改内存数据:在内存窗口中直接修改内存数据,可以观察程序的行为变化。
在我们的示例程序中,我们可以在内存窗口中查看result变量对应的内存数据,确认其值是否正确。
- 调用堆栈窗口
调用堆栈窗口用于查看函数的调用顺序。在调试过程中,可以通过以下步骤使用调用堆栈窗口:
- 打开调用堆栈窗口:在调试过程中,通过菜单栏选择“调试”->“窗口”->“调用堆栈”。
- 查看调用顺序:在调用堆栈窗口中,可以看到当前函数的调用链,包括调用函数和被调用函数的名称、文件名和行号。
- 跳转到调用位置:在调用堆栈窗口中双击某个调用位置,可以跳转到对应的代码位置,方便分析问题。
在我们的示例程序中,我们可以在调用堆栈窗口中看到main函数调用了add函数,确认问题是否出在add函数中。
七、定位问题代码
通过前面的调试准备和调试工具的使用,我们已经具备了定位问题代码的能力。以下是一个完整的调试过程,展示如何通过调试定位并解决问题代码。
- 启动调试
在VS2022中,按F5键启动调试。程序会在第一个断点处暂停执行。 - 观察变量值
在监视窗口中添加num1、num2和result变量,观察它们的值。在add函数中,num1和num2的值分别为10和20,但result的值为-10,显然不符合预期。 - 单步执行
在add函数中按F11键逐语句执行代码,观察变量值的变化。发现return a - b;语句返回的是两个数的差,而不是和。 - 修改问题代码
将return a - b;语句修改为return a + b;,保存修改。 - 重新调试
重新启动调试,按F5键运行程序。观察输出结果,确认问题是否解决。如果输出结果为The result is: 30,则问题已经解决。
通过以上步骤,我们成功定位并解决了程序中的问题。调试工具帮助我们快速分析程序的执行过程,找到问题的根源,并修复问题。
八、总结
调试是软件开发中不可或缺的一部分,它能够帮助我们快速定位和修复代码中的问题,提高开发效率,确保软件质量。在本文中,我们通过一个简单的C语言程序,详细介绍了VS2022的基本调试功能。我们学习了如何准备调试环境、使用调试快捷键、查看变量值、分析调用堆栈以及定位问题代码。希望本文能够帮助你更好地掌握VS2022的调试功能,提升你的开发能力。
关注窝,每三天至少更新一篇优质c语言题目详解~
[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!
相关文章:
【c语言日寄】Vs调试——新手向
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
C#中的Timers.Timer使用用法及常见报错
System.Timers.Timer 是一个基于服务器的计时器,它可以在应用程序中定期触发事件。这个计时器特别适合用于多线程环境,并且不应该与用户界面(UI)直接交互。在 ASP.NET 中,通常使用 System.Timers.Timer 来处理周期性的任务。 主要使用步骤&am…...
chrome小插件:长图片等分切割
前置条件: 安装有chrome谷歌浏览器的电脑 使用步骤: 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.选择图片进行切割,切割完成后会自动保存 代码…...
mysql数据被误删的恢复方案
文章目录 一、使用备份恢复二、使用二进制日志(Binary Log)三、使用InnoDB表空间恢复四、使用第三方工具预防措施 数据误删是一个严重的数据库管理问题,但通过合理的备份策略和使用适当的恢复工具,可以有效地减少数据丢失的风险…...
K8S-Pod资源清单的编写,资源的增删改查,镜像的下载策略
1. Pod资源清单的编写 1.1 Pod运行单个容器的资源清单 ##创建工作目录 mkdir -p /root/manifests/pods && cd /root/manifests/pods vim 01-nginx.yaml ##指定api版本 apiVersion: v1 ##指定资源类型 kind: Pod ##指定元数据 metadata:##指定名称name: myweb ##用户…...
Unity Line Renderer Component入门
Overview Line Renderer 组件是 Unity 中用于绘制连续线段的工具。它通过在三维空间中的两个或两个以上的点的数组,并在每个点之间绘制一条直线。可以绘制从简单的直线到复杂的螺旋线等各种图形。 1. 连续性和独立线条 连续性:Line Renderer 绘制的线条…...
计算机工程:解锁未来科技之门!
计算机工程与应用是一个充满无限可能性的领域。随着科技的迅猛发展,计算机技术已经深深渗透到我们生活的方方面面,从医疗、金融到教育,无一不在彰显着计算机工程的巨大魅力和潜力。 在医疗行业,计算机技术的应用尤为突出。比如&a…...
翻译:How do I reset my FPGA?
文章目录 背景翻译:How do I reset my FPGA?1、Understanding the flip-flop reset behavior2、Reset methodology3、Use appropriate resets to maximize utilization4、Many options5、About the author 背景 在写博客《复位信号的同步与释放(同步复…...
在Unity中使用大模型进行离线语音识别
文章目录 1、Vosk下载下载vosk-untiy-asr下载模型在项目中使用语音转文字音频转文字2、whisper下载下载unity项目下载模型在unity中使用1、Vosk 下载 下载vosk-untiy-asr Github链接:https://github.com/alphacep/vosk-unity-asr 进不去Github的可以用网盘 夸克网盘链接:h…...
SpringBoot+Vue使用Echarts
前言 在vue项目中使用echarts,本次演示是使用vue2 1 前端准备 echarts官网: https://echarts.apache.org/zh/index.html 官网提供了基本的使用说明和大量的图表 1.1 下载echarts 执行命令 npm install echarts 直接这样执行很可能会失败,…...
【QT】-explicit关键字
explicit explicit 是一个 C 关键字,用于修饰构造函数。它的作用是防止构造函数进行隐式转换。 为什么需要 explicit? 在没有 explicit 的情况下,构造函数可以用于隐式类型转换。这意味着,如果你有一个接受某种类型的参数的构造…...
docker: Device or resource busy
(base) [rootbddx-vr-gpu-bcc2 /]#rm -rf /ssd1/docker/overlay2/8d96a51e3fb78e434fcf2b085e952adcc82bfe37485d427e1e017361a277326d/ rm: cannot remove ‘/ssd1/docker/overlay2/8d96a51e3fb78e434fcf2b085e952adcc82bfe37485d427e1e017361a277326d/merged’: Device or re…...
Vue - toRefs() 和 toRef() 的使用
一、toRefs() 在 Vue 3 中,toRefs()可以将响应式对象的属性转换为可响应的 refs。主要用于在解构响应式对象时,保持属性的响应性。 1. 导入 toRefs 函数 import { toRefs } from vue;2. 将响应式对象的属性转换为 ref const state reactive({count: 0,message:…...
(2024,MLLM,Healthcare,综述)多模态学习是否已在医疗保健领域实现通用智能?
Has Multimodal Learning Delivered Universal Intelligence in Healthcare? A Comprehensive Survey 目录 0. 摘要 1. 简介 5. MLLM 5.1 模态编码器与跨模态适配器 5.1.1 图像编码器 (Image Encoder) 5.1.2 语言模型 (Language Model) 5.1.3 跨模态适配器 (Cross-moda…...
css命名规范——BEM
目录 引言 BEM是什么? 块Block 元素Element 修饰语Modifier BEM解决了哪些问题? 在流行框架的组件中使用 BEM 格式 实战 认识设计图 如何使用当前的css规范正确命名? 引言 css样式类命名难、太难了,难于上青天,这个和js变量命名还不一样。看看项目中五花八门的样…...
使用PHP函数 “is_object“ 检查变量是否为对象类型
在PHP中,变量可以保存不同类型的值,包括整数、字符串、数组、布尔值等等。其中,对象是一种特殊的数据类型,用于封装数据和方法。在处理PHP代码中,我们经常需要检查一个变量是否为对象类型,以便进行相应的处…...
Golang:使用DuckDB查询Parquet文件数据
本文介绍DuckDB查询Parquet文件的典型应用场景,掌握DuckDB会让你的产品分析能力更强,相反系统运营成本相对较低。为了示例完整,我也提供了如何使用Python导出MongoDB数据。 Apache Parquet文件格式在存储和传输大型数据集方面变得非常流行。最…...
Moretl FileSync增量文件采集工具
永久免费: <下载> <使用说明> 我们希望Moretl FileSync是一款通用性很好的文件日志采集工具,解决工厂环境下,通过共享目录采集文件,SMB协议存在的安全性,兼容性的问题. 同时,我们发现工厂设备日志一般为增量,为方便MES,QMS等后端系统直接使用数据,我们推出了增量采…...
消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)
Apache Pulusar是一个分布式、多租户、高性能的发布/订阅(Pub/Sub)消息系统,最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点,提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力,适用于大规模分布式系…...
linux 扩容
tmpfs tmpfs 82M 0 82M 0% /run/user/1002 tmpfs tmpfs 82M 0 82M 0% /run/user/0 [输入命令]# fdisk -lu Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 512 bytes Sector size (logi…...
数据表中的数据查询
文章目录 一、概述二、简单查询1.列出表中所有字段2.“*”符号表示所有字段3.查询指定字段数据4.DISTINCT查询 三、IN查询四、BETWEEN ADN查询1.符合范围的数据记录查询2.不符合范围的数据记录查询 五、LIKE模糊查询六、对查询结果排序七、简单分组查询1.统计数量2.统计计算平均…...
深入了解 Java split() 方法:分割字符串的利器
Java 提供的 split() 方法是 String 类中一个常用的工具,它可以将一个字符串根据指定的分隔符切割成多个子字符串,并以字符串数组的形式返回。这个方法常用于字符串的处理、数据解析等场景。本文将详细介绍 Java 中 split() 方法的使用方式,并…...
Ubuntu 安装 docker 配置环境及其常用命令
Docker 安装与配置指南 本文介绍如何在 Ubuntu 系统上安装 Docker,解决权限问题,配置 Docker Compose,代理端口转发,容器内部代理问题等并进行相关的优化设置。参考官方文档:Docker 官方安装指南 一、安装 Docker 1…...
Android Studio安装配置
一、注意事项 想做安卓app和开发板通信,踩了大坑,Android 开发不是下载了就能直接开发的,对于新手需要注意的如下: 1、Android Studio版本,根据自己的Android Studio版本对应决定了你所兼容的AGP(Android…...
leetcode 面试经典 150 题:有效的括号
链接有效的括号题序号20题型字符串解法栈难度简单熟练度✅✅✅ 题目 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须…...
C语言 指针_野指针 指针运算
野指针: 概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的) 指针非法访问: int main() {int* p;//p没有初始化,就意味着没有明确的指向//一个局部变量不初始化,放…...
【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局
目录 1 -> 自适应布局 1.1 -> 线性布局 1.1.1 -> 线性布局的排列 1.1.2 -> 自适应拉伸 1.1.3 -> 自适应缩放 1.1.4 -> 定位能力 1.1.5 -> 自适应延伸 1.2 -> 层叠布局 1.2.1 -> 对齐方式 1.2.2 -> Z序控制 1.3 -> 弹性布局 1.3.1…...
java基础学习——jdbc基础知识详细介绍
引言 数据的存储 我们在开发 java 程序时,数据都是存储在内存中的,属于临时存储,当程序停止或重启时,内存中的数据就会丢失,我们为了解决数据的长期存储问题,有以下解决方案: 通过 IO流书记&…...
第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
第十五届的题目在规定时间内做出了前5道,还有2道找时间再磨一磨。现在把做的一些思路总结如下: 题1:握手问题 问题描述 小蓝组织了一场算法交流会议,总共有 50人参加了本次会议。在会议上,大家进行了握手交流。按照惯例…...
基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
2K320Hz显示器哪个好?
2K320Hz显示器哪个好?320Hz这种高刷新率的显示器确实很少见,那究竟哪个牌子哪个型号更适合你呢? 1.HKC G27H4Pro - 2K320Hz显示器哪个好 外观设计 - HKC G27H4Pro 2K320Hz显示器 三面微边框超震撼:采用三面微边框设计࿰…...
八股学习 微服务篇
微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件: Eureka/Nacos:注册中心;Ribbon:负载均衡;Feign:远程调用;Hystrix/Sentinel:服…...
C# 中 readonly 与 const 的使用
总目录 前言 在C#编程中,readonly 和 const 是两个用于定义不可变数据的关键字。它们都旨在创建那些一旦赋值后就不能再改变的字段或变量。尽管这两个关键字看起来相似,但它们有着不同的特性和适用场景。本文将深入探讨 readonly 和 const 的区别&#…...
Spring Boot Starter介绍
前言 大概10来年以前,当时springboot刚刚出现并没有流行,当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置,其中配置了很多项目中需要用到的Be…...
Kafak 单例生产者实现-C#操作
前面写了一篇入门操作的文章,因为工作需要,简单修改了下如何实现单例生产者。 Kafka入门-C#操作_c# kafka-CSDN博客文章浏览阅读1.6k次,点赞20次,收藏9次。2).报错:“kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state…...
软件开发学习路线——roadmap
推荐软件学习路线网站:https://roadmap.sh/get-started 有有关前端后端开发的学习路径,也有AI,移动开发,管理相关的学习路径 会有相应的词条路径,深入学习 右上角可以设置学习任务的完成情况...
移动端VR处理器和传统显卡的不同
骁龙 XR 系列芯片 更多地依赖 AI 技术 来优化渲染过程,而传统的 GPU 渲染 则倾向于在低画质下运行以减少负载。这种设计是为了在有限的硬件资源下(如移动端 XR 设备)实现高性能和低功耗的平衡。以下是具体的分析: 1. AI 驱动的渲染…...
Jenkins下载 Maven、Allure 插件并且配置环境
文章目录 Jenkins在插件中心下载 maven、allure插件maven插件下载allure插件下载 配置maven、allure 往期推荐: 最新! 在 Linux上搭建Jenkins环境! Jenkins邮件通知的详细配置含邮件通知模板! Jenkin配置企业微信通知 Jenkins在插件中心下载 maven、…...
C# OpenCV机器视觉:连通域分割
在一个阳光明媚得有些 “嚣张” 的午后,阿强像只好奇的小松鼠,一头扎进了他那乱得像被打劫过的实验室。这实验室里,各种电路板、奇形怪状的传感器和缠成一团的电线肆意横陈,仿佛在诉说着主人平日里为科研疯狂的 “战斗” 痕迹。阿…...
【嵌入式】总结——Linux驱动开发(三)
鸽了半年,几乎全忘了,幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的,本篇与前两篇一样,重点在于使用、快速体验,uboot、linux、根文件系统不作深入理解,能用就行。 重新梳理一下脉络,本…...
python操作mysql
前言 在 Python3 中,我们可以使用mysqlclient或者pymysql三方库来接入 MySQL 数据库并实现数据持久化操作。二者的用法完全相同,只是导入的模块名不一样。我们推荐大家使用纯 Python 的三方库pymysql,因为它更容易安装成功。下面我们仍然以之…...
OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯
目录 简述 什么是高通滤波? 高通滤波的概念 应用场景 索贝尔算子 算子公式 实现代码 特点 沙尔算子 算子公式 实现代码 特点 拉普拉斯算子 算子公式 实现代码 特点 高通滤波器的对比与应用场景 相关阅读 OpenCV:图像滤波、卷积与卷积核…...
游戏设备升级怎么选?RTX4070独显,ToDesk云电脑更具性价比
过新年、添喜气!正逢节期来临不知道各位是否都跟小编一样在考虑购置生活中的各样所需呐? 25年可谓是3A游戏大作之年,例如《GTA6》《文明7》《死亡搁浅2》《刺客信条:影》下半年落地的《塞尔达传说:新篇章》《生化危机9…...
【useLayoutEffect Hook】在浏览器完成布局和绘制之前执行副作用
目录 前言语法useLayoutEffect 对比 useEffect:示例 前言 useLayoutEffect 是 React 中的一个 Hook, 类似于 useEffect,但有一个关键的区别:它会在所有的 DOM 变更之后同步调用 effect。这意味着它可以读取 DOM 布局并同步重新渲…...
Llama 3:开源大模型的里程碑式突破
标题:Llama 3:开源大模型的里程碑式突破 文章信息摘要: Meta通过Llama 3展现了开源LLM的重大突破:采用超大规模训练数据和多阶段训练方法(SFT、rejection sampling、PPO和DPO),突破了传统的Chi…...
Spring 框架基础:IOC 与 AOP 原理剖析及面试要点
在上一篇中,我们深入探讨了 Java 反射机制,了解了它在运行时动态操作类和对象的强大能力。而今天,我们将进入 Spring 框架的世界。Spring 框架作为 Java 企业级开发中最流行的框架之一,极大地简化了企业级应用的开发过程。对于春招…...
《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》
在当今科技飞速发展的时代,鸿蒙Next系统作为一款具有创新性和前瞻性的操作系统,为人工智能技术的发展提供了广阔的舞台。而开源和合作则是推动鸿蒙Next系统中人工智能技术创新和发展的两大关键引擎。 开源:创新的源泉 代码共享与知识传播&am…...
Redis使用基础
1 redis介绍 Redis(Remote Dictionary Server ),即远程字典服务 ! 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并…...
React和Vue有什么区别,如何选择?
React和Vue有什么区别,如何选择? React 和 Vue 是当前最受欢迎的前端框架之一,两者在开发者中都有极高的声誉。它们都旨在帮助开发人员构建用户界面,但在实现方式和适用场景上有所不同。如果你正考虑在项目中选择 React 或 Vue&a…...
C++|开源日志库log4cpp和glog
文章目录 log4cpp 和 glog对比1. **功能对比**2. **易用性和配置**3. **性能**4. **线程安全**5. **日志输出**6. **功能扩展**7. **适用场景**8. **总结** 其它开源C日志库1. **spdlog**2. **easylogging**3. **Boost.Log**4. **loguru**5. **Poco Logging**6. **Qt Logging (…...