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

Keil5调试技巧

一、引言

Keil5作为一款广泛应用于嵌入式系统开发的集成开发环境(IDE),在微控制器编程领域占据着重要地位。它不仅提供了强大的代码编辑和编译功能,还具备丰富的调试工具,帮助开发者快速定位和解决代码中的问题。本文将深入探讨 Keil5 的各种调试技巧,旨在帮助开发者更高效地使用该工具,提高开发效率和代码质量。

二、Keil5调试环境基础设置

2.1 项目创建与配置

在开始调试之前,首先要创建一个新的 Keil5 项目。打开 Keil5 后,选择 “Project” -> “New μVision Project”,为项目选择一个合适的存储路径并命名。接下来,在弹出的 “Device Selection for Target” 对话框中,选择目标微控制器,例如常见的 STM32 系列。

选择好目标设备后,Keil5 会自动加载相应的启动文件和配置信息。此时,还需要对项目进行一些基本配置,如选择编译器、调试器等。在 “Options for Target” 对话框中,可以设置编译选项、调试选项等。例如,在 “C/C++” 选项卡中,可以设置优化级别、包含路径等;在 “Debug” 选项卡中,选择合适的调试器,如 J-Link、ST-Link 等。

2.2 调试器连接与配置

调试器是实现代码调试的关键设备。常见的调试器有 J-Link、ST-Link 等。以 J-Link 为例,将 J-Link 调试器通过 USB 接口连接到计算机,再使用相应的连接线将 J-Link 与目标开发板连接起来。

在 Keil5 中,打开 “Options for Target” 对话框,切换到 “Debug” 选项卡,选择 “J-Link/J-Trace Cortex” 作为调试器。点击 “Settings” 按钮,在弹出的对话框中可以对 J-Link 进行进一步配置,如选择合适的接口(SWD 或 JTAG)、设置时钟频率等。配置完成后,点击 “OK” 保存设置。

2.3 代码编译与下载

在进行调试之前,需要确保代码能够正确编译和下载到目标设备中。在 Keil5 中,点击 “Build Target” 按钮或使用快捷键 “F7” 进行代码编译。如果代码中存在语法错误或逻辑错误,编译器会在 “Build Output” 窗口中显示相应的错误信息,开发者需要根据错误信息对代码进行修改。

当代码编译成功后,点击 “Download” 按钮或使用快捷键 “Ctrl + F8” 将代码下载到目标设备中。下载完成后,就可以开始进行调试操作了。

三、基本调试操作技巧

3.1 断点设置与管理

断点是调试过程中最常用的工具之一,它可以让程序在指定的位置暂停执行,方便开发者查看程序的状态和变量的值。在 Keil5 中,设置断点非常简单,只需在代码编辑器中点击行号旁边的空白处,即可在该行设置一个断点。断点会以红色圆点的形式显示。

除了手动设置断点外,还可以通过 “Debug” 菜单中的 “Insert/Remove Breakpoint” 选项或使用快捷键 “F9” 来设置或移除断点。如果需要设置多个断点,可以在不同的行号上重复上述操作。

在调试过程中,还可以对断点进行管理。例如,可以通过 “Breakpoints” 窗口查看和管理所有设置的断点。在 “Breakpoints” 窗口中,可以选择启用或禁用某个断点,也可以删除不需要的断点。

3.2 单步执行代码

单步执行代码是调试过程中另一个重要的操作,它可以让开发者逐行查看程序的执行过程。Keil5 提供了三种单步执行模式:“Step Into”(进入函数)、“Step Over”(跳过函数)和 “Step Out”(跳出函数)。

  • Step Into(F11):当程序执行到调用函数的语句时,使用 “Step Into” 模式会进入被调用的函数内部,逐行执行函数中的代码。这对于查看函数内部的执行细节非常有用。
  • Step Over(F10):与 “Step Into” 不同,“Step Over” 模式会将函数调用视为一条语句,直接执行完函数调用并返回结果,而不会进入函数内部。当开发者已经了解某个函数的实现细节,只想关注函数的返回结果时,可以使用 “Step Over” 模式。
  • Step Out(Shift + F11):当程序在函数内部执行时,使用 “Step Out” 模式会立即执行完当前函数的剩余代码,并返回到调用该函数的语句的下一行。这对于快速跳出某个函数非常有用。

3.3 观察变量和内存

在调试过程中,观察变量的值和内存中的数据是了解程序状态的重要手段。Keil5 提供了多种方式来观察变量和内存。

  • Watch 窗口:通过 “View” -> “Watch Windows” -> “Watch 1” 等选项可以打开 “Watch” 窗口。在 “Watch” 窗口中,可以添加需要观察的变量,当程序暂停时,变量的值会实时更新。可以直接在 “Name” 列中输入变量名,也可以通过在代码编辑器中选中变量并右键选择 “Add to Watch” 将变量添加到 “Watch” 窗口中。
  • Memory 窗口:通过 “View” -> “Memory Windows” -> “Memory 1” 等选项可以打开 “Memory” 窗口。在 “Memory” 窗口中,可以输入内存地址,查看该地址处的内存数据。可以选择不同的显示格式,如十六进制、十进制、ASCII 等。

3.4 查看寄存器状态

寄存器是微控制器中用于临时存储数据和指令的重要部件。在调试过程中,查看寄存器的状态可以帮助开发者了解 CPU 的当前状态和程序的执行情况。在 Keil5 中,通过 “View” -> “Registers Window” 可以打开 “Registers” 窗口。

“Registers” 窗口会显示当前 CPU 中各个寄存器的值,包括通用寄存器、特殊功能寄存器等。开发者可以观察寄存器的值的变化,了解程序对寄存器的操作。例如,在 ARM Cortex-M 系列微控制器中,常见的寄存器有 R0 - R15、PSP、MSP 等。

四 高级调试技巧

4.1 条件断点的使用

条件断点是一种特殊的断点,只有当满足特定条件时,断点才会触发。这在调试复杂程序时非常有用,可以帮助开发者快速定位问题。在 Keil5 中,设置条件断点的步骤如下:

  1. 在代码编辑器中设置一个普通断点。
  2. 右键点击断点,选择 “Breakpoint Properties”。
  3. 在弹出的 “Breakpoint Properties” 对话框中,切换到 “Condition” 选项卡。
  4. 在 “Condition” 文本框中输入条件表达式,例如 “i == 10”,表示当变量 “i” 的值等于 10 时,断点才会触发。
  5. 点击 “OK” 保存设置。

4.2 日志记录与跟踪

在调试过程中,有时候需要记录程序的执行过程和变量的变化情况,以便后续分析。Keil5 提供了日志记录和跟踪功能,可以帮助开发者实现这一目的。

  • Trace 窗口:通过 “View” -> “Trace Windows” -> “Trace 1” 等选项可以打开 “Trace” 窗口。在 “Trace” 窗口中,可以记录程序的执行轨迹、函数调用情况等。可以通过设置跟踪选项,如跟踪的深度、跟踪的事件等,来控制跟踪的内容。
  • 日志输出:在代码中使用特定的函数将调试信息输出到日志文件中。例如,在 ARM Cortex-M 系列微控制器中,可以使用 UART 或 SWO(Serial Wire Output)接口将调试信息输出到计算机上。在 Keil5 中,可以通过 “Options for Target” 对话框中的 “Debug” 选项卡,配置 SWO 接口的参数,如波特率、数据位等。

4.3 硬件调试功能

Keil5 支持多种硬件调试功能,如实时内存访问、硬件断点等。这些功能可以帮助开发者更深入地了解硬件的工作状态和程序的执行情况。

  • 实时内存访问:通过 Keil5 的调试器,可以实时访问目标设备的内存,对内存中的数据进行读写操作。这在调试硬件驱动程序或进行内存测试时非常有用。
  • 硬件断点:与软件断点不同,硬件断点是由微控制器的硬件支持的断点,它可以在不影响程序执行速度的情况下实现断点功能。在 Keil5 中,可以通过 “Debug” 菜单中的 “Hardware Breakpoints” 选项来设置硬件断点。

4.4 多线程调试

对于支持多线程的微控制器,如 ARM Cortex-M 系列中的一些型号,Keil5 提供了多线程调试功能。在多线程调试过程中,开发者可以同时查看多个线程的执行状态和变量的值,方便调试多线程程序。

在 Keil5 中,要进行多线程调试,首先需要在代码中使用操作系统(如 FreeRTOS、uC/OS 等)来创建和管理线程。然后,在调试时,通过 “Debug” 菜单中的 “Threads” 选项可以打开 “Threads” 窗口。在 “Threads” 窗口中,可以查看当前所有线程的状态,如运行、就绪、阻塞等,并可以切换到不同的线程进行调试。

五、调试过程中的常见问题及解决方法

5.1 调试器连接失败

调试器连接失败是调试过程中常见的问题之一。可能的原因包括调试器硬件故障、连接线松动、调试器驱动程序未安装等。解决方法如下:

  • 检查调试器硬件是否正常工作,可以尝试将调试器连接到其他计算机或开发板上进行测试。
  • 检查连接线是否连接牢固,确保没有松动或损坏。
  • 检查调试器驱动程序是否正确安装。如果驱动程序未安装或安装不正确,可以从调试器厂商的官方网站上下载最新的驱动程序进行安装。

5.2 断点无法触发

断点无法触发可能是由于多种原因引起的,如代码优化导致断点位置改变、断点条件设置错误等。解决方法如下:

  • 检查代码的优化级别。如果优化级别过高,编译器可能会对代码进行优化,导致断点位置发生改变。可以尝试降低优化级别,重新编译代码。
  • 检查断点条件设置是否正确。确保条件表达式的语法正确,并且条件的值在程序执行过程中能够满足。
  • 检查断点是否被禁用。在 “Breakpoints” 窗口中,确保断点处于启用状态。

5.3 变量值显示异常

变量值显示异常可能是由于变量的作用域问题、内存损坏等原因引起的。解决方法如下:

  • 检查变量的作用域。确保变量在当前调试位置是可见的,并且其生命周期没有结束。
  • 检查内存是否损坏。可以使用内存检查工具(如 Keil5 的 “Memory Checker” 功能)来检查内存是否存在损坏或越界访问的问题。
  • 检查代码中是否存在指针操作错误。指针操作错误可能会导致内存访问异常,从而影响变量的值。

5.4 程序运行速度过慢

程序运行速度过慢可能是由于调试器的开销、代码中存在性能瓶颈等原因引起的。解决方法如下:

  • 减少调试器的开销。可以关闭不必要的调试功能,如跟踪、日志记录等,以提高程序的运行速度。
  • 优化代码。检查代码中是否存在性能瓶颈,如循环嵌套过深、频繁的内存分配和释放等。可以通过优化算法、减少不必要的计算等方式来提高代码的性能。

六、调试技巧的实际应用案例

6.1 解决数组越界问题

假设有一个程序,需要对一个数组进行遍历并计算数组元素的和。在调试过程中,发现程序运行到某个位置时出现异常。通过设置断点和观察变量的值,发现数组越界访问是导致异常的原因。

#include <stdio.h>#define ARRAY_SIZE 5int main() {int arr[ARRAY_SIZE] = {1, 2, 3, 4, 5};int sum = 0;int i;for (i = 0; i <= ARRAY_SIZE; i++) {  // 这里存在数组越界问题sum += arr[i];}printf("Sum: %d\n", sum);return 0;
}

在调试时,可以在 for 循环内部设置断点,观察变量 i 和 arr[i] 的值。当 i 等于 ARRAY_SIZE 时,会发现访问的数组元素超出了数组的边界,从而导致程序异常。将 for 循环的条件修改为 i < ARRAY_SIZE 即可解决问题。

6.2 调试中断服务程序

在嵌入式系统中,中断服务程序(ISR)是处理外部事件的重要机制。假设一个程序中使用了定时器中断,但是在调试过程中发现定时器中断没有正常触发。

首先,检查定时器的配置是否正确,包括定时器的时钟源、预分频系数、计数周期等。可以通过查看寄存器的值来确认定时器的配置情况。然后,在中断服务程序的入口处设置断点,观察程序是否能够进入中断服务程序。如果程序无法进入中断服务程序,可能是中断使能位没有正确设置或者中断优先级配置不正确。

以下是一个简单的定时器中断示例代码:

c

#include <stm32f10x.h>void TIM2_IRQHandler(void) {if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {// 处理定时器中断事件TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}int main() {// 定时器初始化配置TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseStructure.TIM_Period = 999;TIM_TimeBaseStructure.TIM_Prescaler = 7199;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);TIM_Cmd(TIM2, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);while (1) {// 主循环}
}

在调试时,可以在 TIM2_IRQHandler 函数的入口处设置断点,观察程序是否能够进入该函数。如果无法进入,可以检查定时器的使能位、中断使能位和中断优先级配置是否正确。

七、总结与展望

本文详细介绍了 Keil5 的各种调试技巧,包括基础设置、基本调试操作、高级调试技巧、常见问题及解决方法和实际应用案例等方面。通过掌握这些调试技巧,开发者可以更高效地使用 Keil5 进行嵌入式系统开发,快速定位和解决代码中的问题,提高开发效率和代码质量。

随着嵌入式系统的不断发展,对调试工具的要求也越来越高。未来,Keil5 可能会进一步完善其调试功能,如支持更复杂的硬件调试、提供更强大的可视化调试界面等。同时,开发者也需要不断学习和掌握新的调试技巧,以适应不断变化的开发需求。

希望本文能够对使用 Keil5 进行嵌入式系统开发的开发者有所帮助,让大家在调试过程中少走弯路,更加顺利地完成项目开发。

八、参考链接

  • Keil 官方网站:Keil Embedded Development Tools for Arm, Cortex-M, Cortex-R4, 8051, C166, and 251 processor families.
  • ARM 官方网站:Arm Developer
  • STMicroelectronics 官方网站:https://www.st.com/
  • 相关技术论坛:EETOP-创芯网、21IC电子网 - 电子工程师的优选网站 等。

相关文章:

Keil5调试技巧

一、引言 Keil5作为一款广泛应用于嵌入式系统开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;在微控制器编程领域占据着重要地位。它不仅提供了强大的代码编辑和编译功能&#xff0c;还具备丰富的调试工具&#xff0c;帮助开发者快速定位和解决代码中的问题。本文…...

Web PKI现行应用、标准

中国现行 Web PKI 标准 中国在 Web PKI&#xff08;公钥基础设施&#xff09;领域制定了多项国家标准&#xff0c;以确保网络安全和数字证书管理的规范性。以下是一些现行的重要标准&#xff1a; 1. GB/T 21053-2023《信息安全技术 公钥基础设施 PKI系统安全技术要求》 该标…...

ROS多机通信(四)——Ubuntu 网卡 Mesh 模式配置指南

引言 使用Ad-hoc加路由协议和直接Mesh模式配置网卡实现的网络结构是一样的&#xff0c;主要是看应用选择&#xff0c; Ad-Hoc模式 B.A.T.M.A.N. / OLSR 优点&#xff1a;灵活性高&#xff0c;适合移动性强或需要优化的复杂网络。 缺点&#xff1a;配置复杂&#xff0c;需手动…...

【实用部署教程】olmOCR智能PDF文本提取系统:从安装到可视化界面实现

文章目录 引言系统要求1. 环境准备&#xff1a;安装Miniconda激活环境 2. 配置pip源加速下载3. 配置学术加速&#xff08;访问国外资源&#xff09;4. 安装系统依赖5. 安装OLMOCR6. 运行OLMOCR处理PDF文档7. 理解OLMOCR输出结果9. 可视化UI界面9.1 安装界面依赖9.2 创建界面应用…...

STM32单片机uCOS-Ⅲ系统11 中断管理

目录 一、异常与中断的基本概念 1、中断的介绍 2、和中断相关的名词解释 二、中断的运作机制 三、中断延迟的概念 四、中断的应用场景 五、中断管理讲解 六、中断延迟发布 1、中断延迟发布的概念 2、中断队列控制块 3、中断延迟发布任务初始化 OS_IntQTaskInit() 4…...

CTF【WEB】学习笔记1号刊

Kali的小工具箱 curl www.xxx.com&#xff1a;查看服务器响应返回的信息 curl -I www.xxx.com:查看响应的文件头 一、cmd执行命令 ipconfig&#xff1a;ip地址配置等&#xff1b; 二、 Kali操作 1.sudo su&#xff1b; 2.msfconsole 3.search ms17_010 永恒之蓝&#xff…...

cpp-友元

理解 C 中的友元&#xff08;Friend&#xff09; 在 C 语言中&#xff0c;封装&#xff08;Encapsulation&#xff09; 是面向对象编程的重要特性之一。它允许类将数据隐藏在私有&#xff08;private&#xff09;或受保护&#xff08;protected&#xff09;成员中&#xff0c;…...

Spring AOP 核心概念与实践指南

第一章&#xff1a;AOP 核心概念与基础应用 1.1 AOP 核心思想 ​面向切面编程&#xff1a;通过横向抽取机制解决代码重复问题&#xff08;如日志、事务、安全等&#xff09;​核心优势&#xff1a;不修改源代码增强功能&#xff0c;提高代码复用性和可维护性 1.2 基础环境搭…...

利用ffmpeg库实现音频Opus编解码

一、编译与环境配置 ‌libopus库集成‌ 需在编译FFmpeg时添加--enable-libopus参数&#xff0c;编译前需先安装libopus源码并配置动态库路径‌。最新FFmpeg 7.1版本默认支持Opus的浮点运算优化和VBR/CVBR模式‌。 ‌多平台兼容性‌ Opus支持Windows/Linux/macOS平台&#xff0…...

深入理解指针(1)(C语言版)

文章目录 前言一、内存和地址1.1 内存1.2 究竟该如何理解编址 二、指针变量和地址2.1 取地址操作符&2.2 指针变量和解引用操作符*2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引用操作符 2.3 指针变量的大小 三、指针变量类型的意义3.1 指针的解引用3.2 指针-整数3.3 voi…...

计算机网络——通信基础和传输介质

物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&#xff09;的传输 到了数据链路层之后&#xff0c;它会以帧为单位&#xff0c;把若干个比特交给物理层&#xff0c;物理层需要把这些比特信息转化成信号&#xff0c;在物理传输媒体上进行传输 通信基础基本概念 信…...

【橘子网络】关于网络分层以及协议的全局讲解

一、网络设备 1、硬件网络设备 1.1、主机(host) 主机的定义比较广泛&#xff0c;所有的接收流量或者发送流量的设备都可以被称之为主机。可以是电脑&#xff0c;手机&#xff0c;服务器。在当今云服务大行其道的局面下&#xff0c;各种云设备也可以被称之为主机。 基于这个…...

macOS 使用 enca 识别 文件编码类型(比 file 命令准确)

文章目录 macOS 上安装 enca基本使用起因 - iconv关于 enca安装 Encaenca & enconv 其它用法 macOS 上安装 enca brew install enca基本使用 enca filepath.txt示例 $ enca 动态规划算法.txt [0] Simplified Chinese National Standard; GB2312CRLF line terminat…...

MySQL 字符集

目录 字符集的基本概念 常见MySQL字符集 ascii(单字节字符集) latin1(单字节字符集) utf8(多字节字符集) utf8mb4(多字节字符集) MySQL默认字符集 MySQL字符集的层次级别 服务器级别 数据库级别 表级别 列级别 连接字符集 字符集是计算机科学中的一个重要概念&…...

Linux shell脚本3-if语句、case语句、for语句、while语句、until语句、break语句、continue语句,格式说明及程序验证

目录 1.if 控制语句 1.1 if 语句格式 1.2 程序验证 2.case语句 2.1case语句格式 2.2程序验证 2.2.1 终端先执行程序&#xff0c;在输入一个数 2.2.2 终端执行程序时同时输入一个预设变量 2.2.3 case带有按位或运算和通配符匹配 3.for语句 3.1for语句格式 3.2程序验…...

基于虚拟知识图谱的语义化决策引擎

在数字化转型浪潮中&#xff0c;企业数据资产的价值释放面临两大挑战&#xff1a;海量异构数据的整合困局与业务-技术语义鸿沟。本文解析飞速创软灵燕智能体平台的创新解决方案——通过构建业务语义驱动的虚拟知识图谱系统&#xff0c;实现企业数据的智能认知与决策赋能。 一、…...

Unity Shader 的编程流程和结构

Unity Shader 的编程流程和结构 Unity Shader 的编程主要由以下三个核心部分组成&#xff1a;Properties&#xff08;属性&#xff09;、SubShader&#xff08;子着色器&#xff09; 和 Fallback&#xff08;回退&#xff09;。下面是它们的具体作用和结构&#xff1a; 1. Pr…...

C++ 继承

目录 一、继承的概念与定义 1.1 继承的概念 1.2 继承的定义 1.2.1 语法 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、C11 final 六、继承与友元 七、继承与静态成…...

XSS Game(DOM型) 靶场 通关

目录 靶场网址 Ma Spaghet! 分析 解题 Jefff 分析 解题 方法一 方法二 Ugandan Knuckles 分析 解题 Ricardo Milos 分析 解题 Ah Thats Hawt 分析 解题 方法一 方法二 Ligma 分析 解题 ​ Mafia 分析 解题 方法一&#xff1a;构造函数 方法二&#xf…...

XSS基础靶场练习

目录 1. 准备靶场 2. PASS 1. Level 1&#xff1a;无过滤 源码&#xff1a; 2. level2&#xff1a;转HTML实体 htmlspecialchars简介&#xff1a; 源码 PASS 3. level3:转HTML深入 源码&#xff1a; PASS 4. level4:过滤<> 源码&#xff1a; PASS: 5. level5:过滤on 源码…...

leetcode-200.岛屿数量

首先&#xff0c;想要找岛&#xff0c;肯定是要逐个遍历的&#xff0c;否则肯定会漏岛。 其次&#xff0c;我怎么知道两个点是否属于一个岛&#xff1f;只有一个方法&#xff0c;我踏上一个岛的某个点时&#xff0c;我就分别往四周走&#xff0c;且把当前地块毁掉&#xff0c;就…...

Linux | ubuntu安装 SSH 软件及测试工具

01 windows 要怎么和 ubuntu 互传文件呢&#xff0c;我们可以使用 ssh 软件。 终端输入 sudo apt-get install openssh-server &#xff0c;输入登录 Ubuntu 用户的密码&#xff0c;这里我们输入 y 确认安装。如下图所示。 接着继续改 ssh 配置文件&#xff0c;因为 ssh 默认…...

组件日志——etcd

目录 一、简介 二、安装【Ubuntu】 安装etcd 安装CAPI 三、写一个示例 3.0写一个示例代码 3.1获取一个etcd服务 3.2获取租约(写端操作) 3.3使用租约(写端操作) 3.4销毁租约(写端操作) 3.5获取etcd服务中的服务列表(读端操作) 3.6监听状态变化(读端操作) 一、简介 Et…...

search_fields与filterset_fields的使用

在Django中&#xff0c;search_fields 和 filterset_fields 可以在视图类中使用&#xff0c;尤其是在 Django REST Framework (DRF) 中。它们分别用于实现搜索和过滤功能。以下是它们在视图类中的具体使用方法。 1. search_fields 在视图类中的使用 search_fields 是 DRF 中 S…...

SQLite Delete 语句详解

SQLite Delete 语句详解 SQLite 是一种轻量级的数据库管理系统&#xff0c;广泛应用于移动设备、嵌入式系统和服务器端应用。在数据库管理中&#xff0c;删除数据是一项基本操作。SQLite 提供了强大的删除功能&#xff0c;本文将详细介绍 SQLite 的 Delete 语句及其用法。 1.…...

通往自主智能之路:探索自我成长的AI

1. 引言&#xff1a;当前AI范式与自我成长智能的愿景 当前的人工智能领域在很大程度上由大型语言模型&#xff08;LLM&#xff09;的卓越能力所定义。这些模型&#xff0c;例如OpenAI的GPT系列和谷歌的BERT&#xff0c;已经展示了前所未有的理解和生成类人文本的能力。LLM通常…...

[自动化] 【八爪鱼】使用八爪鱼实现CSDN文章自动阅读脚本

在CSDN上&#xff0c;文章的阅读量往往是衡量内容影响力的一个重要指标。为了测试自动化手段能否提高阅读数&#xff0c;我尝试使用网页自动化工具来模拟人工阅读某个ID的文章。 1. 网页自动化的常见方案 谈到网页自动化&#xff0c;Selenium 是一个最常见的选择。它可以通过…...

Kafka消息序列化深度革命:构建高性能、高安全的自定义编码体系

一、突破默认序列化的桎梏 1.1 原生序列化器的致命缺陷 Kafka默认提供的StringSerializer/ByteArraySerializer在复杂场景下暴露三大痛点&#xff1a; 类型安全黑洞&#xff1a;字节流缺乏元数据描述&#xff0c;消费端解析如履薄冰版本兼容困境&#xff1a;数据结构变更导致…...

2025年如何避免使用验证码求解器时被IP封禁

引言 2025年&#xff0c;验证码求解器已成为自动化网络抓取和其他在线流程的关键工具。然而&#xff0c;自动化用户面临的一个常见挑战是IP封禁。当网站检测到自动化活动时&#xff0c;通常会阻止发出请求的IP地址&#xff0c;导致验证码挑战无法解决。本文将探讨使用验证码求…...

前端 AI IDE应用优缺点

嗯&#xff0c;用户问了三个前端面试的问题&#xff0c;我需要仔细分析每个问题&#xff0c;并结合提供的搜索结果来给出全面且准确的回答。 第一个问题是关于开发工具Cursor或Vim的Windurf在开发中的占比以及它们的缺点。从搜索结果里看&#xff0c;网页3提到了Trae对标Curso…...

银河麒麟桌面版包管理器(二)

APT包管理器 APT是Debian及其派生系统的包管理器&#xff0c;构建在dpkg之上&#xff0c;以其强大的依赖性处理能力和丰富的软件仓库而闻名。APT具有自动解决依赖关系、提供易于使用的命令行工具&#xff08;如apt-get、apt-cache等&#xff09;&#xff0c;以及稳定的软件更新…...

Leetcode 3494. Find the Minimum Amount of Time to Brew Potions

Leetcode 3494. Find the Minimum Amount of Time to Brew Potions 1. 解题思路2. 代码实现 题目链接&#xff1a;3494. Find the Minimum Amount of Time to Brew Potions 1. 解题思路 这道题虽说算是搞定了&#xff0c;通过了全部的测试样例&#xff0c;不过还是很暴力的求…...

制作Oracle11g Docker 镜像

基于Linux系统&#xff0c;宿主主机要设置如下环境变量&#xff0c;oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…...

rocky linux下载软件

一、配置国内镜像源加速下载 Rocky Linux 默认使用国外软件源&#xff0c;国内用户可通过替换为阿里云镜像提升下载速度&#xff1a; 备份原配置文件&#xff1a; cp -r /etc/yum.repos.d /etc/yum.repos.d.backup 修改镜像源&#xff1a; sed -e s|^mirrorlist|#mirrorli…...

JVM的组成--运行时数据区

JVM的组成 1、类加载器&#xff08;ClassLoader&#xff09; 类加载器负责将字节码文件从文件系统中加载到JVM中&#xff0c;分为&#xff1a;加载、链接&#xff08;验证、准备、解析&#xff09;、和初始化三个阶段 2、运行时数据区 运行时数据区包括&#xff1a;程序计数…...

SpringBoot中安全的设置阿里云日志SLS的accessKey

众所周知,阿里云的服务都是基于accesskeyId和accesskeySecret来进行身份鉴权的,但唯独日志因为需要写入到.xml文件里对于accesskeyId和accesskeySecret需要进行一定程度的改进,尤其是使用了jasypt进行加密的参数传递进去logback.xml更是会遇到需要对参数进行解密的问题,而官网只…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例11,TableView15_11带分页的导出表格示例

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

C++多线程编程:从创建到管理的终极指南

在高性能计算时代,掌握多线程编程是提升程序效率的必修课!本文将手把手教你如何用C++11标准库轻松创建和管理线程,告别单线程的“龟速”,让代码跑出多核CPU的性能! 一、多线程为何重要? 充分利用多核CPU:现代计算机普遍支持多核并行,多线程可让程序性能指数级提升。提升…...

人工智能算法基础

基础算法 排序查找线性结构树散列图堆栈 机器学习算法 定义&#xff1a;数据算法 流程&#xff1a;数据收集与预处理、特征选择、训练和测试模型、模型的评估。 监督学习 定义&#xff1a;是从给定的训练数据集中学习出一个函数&#xff0c;当新的数据到来时&#xff0c;可…...

Normal distribution (正态分布)

Normal distribution {正态分布} 1. Normal distribution (正态分布) Gaussian distribution (高斯分布)1.1. Probability density function (概率密度函数)1.2. Standard normal distribution (标准正态分布)1.3. Cumulative distribution function (累积分布函数) 2. 正态分…...

企业级前端架构设计与实战

一、架构设计核心原则 1.1 模块化分层架构 典型目录结构&#xff1a; src/├── assets/ # 静态资源├── components/ # 通用组件├── pages/ # 页面模块├── services/ # API服务层├── store/ # 全局状态管理├── uti…...

数据模型,数据建模,组件,核心价值,使用,意义

数据模型 一组由符号,文本组成的集合, 用以准确表达信息景观, 达到有效交流,沟通的目的 数据建模 是发现,分析和确定数据需求的过程,是一种称为数据模型的精确形式表示和传递这些需求 数据模型的组件 实体, 关系, 属性和域 数据模型的核心价值 交流性 精确性 数据模型的…...

JavaScript 比较运算符

JavaScript 比较运算符 一、基础比较运算符类型 运算符名称示例核心特性==宽松相等"5" == 5 → true隐式类型转换===严格相等"5" === 5 → false类型+值双重校验!=宽松不等null != 0 → true等效于 !(a == b)!==严格不等5 !== "5" → true类型或…...

AI Agent战国时代:Manus挑战者的破局之道与技术博弈

随着Manus引爆通用型AI Agent的"手脑协同"革命&#xff0c;全球AI Agent赛道进入技术竞速期。Flowith、UI-TARS、LangManus等新势力通过差异化路径重构市场格局&#xff0c;背后折射出开源生态、本土化创新与跨模态交互的深层技术博弈。本文结合行业权威报告与公开技…...

linux--时区查看和修改

查看当前时间和时区: 打开终端&#xff0c;输入以下命令查看当前的日期和时间设置&#xff1a; timedatectl修改时区: 使用 timedatectl 命令来修改时区&#xff1a; sudo timedatectl set-timezone <时区>例如&#xff0c;设置时区为北京时间&#xff08;中国标准时间&a…...

个人博客系统 --- 测试报告

一、项目功能介绍 该项目由&#xff1a;登录模块、博客首页模块、博客详情页模块、博客编辑页模块四个功能模块组成。 该系统实现了个人博客的保存以及记录了发布日期、时间、发布人等信息。 二、测试内容与测试用例 我们需要对该系统进行功能测试&#xff0c;界面测试&…...

ESP32S3基于FreeRTOS实时操作系统控制舵机

这段代码是一个基于ESP32的舵机控制示例&#xff0c;通过MCPWM模块配置定时器、操作符、比较器和发生器&#xff0c;生成特定脉冲宽度的PWM信号&#xff0c;控制舵机在 -60度到60度之间以2度为步长往复转动。 1. 源码部分 #include "freertos/FreeRTOS.h" #include…...

【vue的some和filter】

在 Vue 中&#xff0c;some 和 filter 是两种不同的数组方法&#xff0c;分别用于处理数据筛选和条件判断。以下是它们在 Vue 中的具体用法和区别&#xff1a; 一、filter 方法 作用&#xff1a;对数组进行过滤&#xff0c;返回符合条件的新数组。 使用场景&#xff1a;常用于…...

【LC插件开发】基于Java实现FSRS(自由间隔重复调度算法)

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解【LC插件开发】基于Java实现FSRS&#xff08;自由间隔重复调度算法&#xff09;&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; 目录…...

jupyter 操作相关内容

1、jupyter界面美化 pip3 install jupyterthemes查看可用主题 jt -l推荐两个 jt -t grade3 -f consolamono -fs 140 -tfs 13 -nfs 115 -ofs 14 -cellw 90% -Tjt -t chesterish -f consolamono -fs 140 -altp -tfs 13 -nfs 115 -ofs 14 -cellw 90% -T...