当前位置:首页>Linux>如何在linux下开发stm32?

如何在linux下开发stm32?

  • 2026-08-21 13:29:29
如何在linux下开发stm32?

STM32 开发环境配置(Ubuntu + VSCode + CubeMX + GCC 全流程)

0. 为什么用这套方案?

开发 STM32 有三条主流路线,先帮你选对路:

方案
系统
优点
缺点
Keil MDK
仅 Windows
行业标准、资料多
收费、强绑 Windows、Linux 只能 Wine
STM32CubeIDE
跨平台
ST 官方、开箱即用
体积大、Eclipse 卡、编辑体验一般
👉 CubeMX + VSCode + GCC(本方案)
跨平台
免费、轻量、编辑器现代、Git 友好、可命令行自动化
初始配置步骤多一些(本笔记就是解决这个)

核心理念:CubeMX 只负责「画外设 + 生成代码骨架」,编译/烧录/调试全部交给开源命令行工具,VSCode 作为统一的编辑与调试前端。

1. 整体工具链一览(你需要装什么)

最终你会拥有下面这张表里的所有工具。逐项对照检查即可

工具
作用
本文安装方式
验证命令
arm-none-eabi-gcc
ARM 交叉编译器
apt
arm-none-eabi-gcc --version
libnewlib-arm-none-eabi
嵌入式 C 标准库
apt
dpkg -l | grep newlib
make
构建工具
apt
make --version
cmake
(可选)
另一套构建系统
apt
cmake --version
gdb-multiarch
调试器(关键)
apt
gdb-multiarch --version
openocd
烧录 + GDB server
apt / 源码
openocd --version
stlink
(st-flash)
备选烧录工具
apt
st-flash --version
STM32CubeMX
图形化配置 + 生成代码
官网 .sh 安装包
启动图形界面
VSCode 插件
编辑 + 调试前端
VSCode 扩展市场
见第 5 节

[!tip] 关于 arm-none-eabi-gdb网上老教程会让你装 arm-none-eabi-gdb。但 Ubuntu apt 的 gcc-arm-none-eabi 包不含 gdb。本方案改用 gdb-multiarch,功能完全等价、更新更全,是 Ubuntu 官方推荐的多架构调试器。配置里把 GDB 路径写成 gdb-multiarch 就行(见第 7 节)。


2. 第一步:安装交叉编译工具链(一行命令)

打开终端,复制粘贴

sudo apt updatesudo apt install -y \  gcc-arm-none-eabi \  libnewlib-arm-none-eabi \  libstdc++-arm-none-eabi-newlib \  make \  cmake \  gdb-multiarch \  openocd \  stlink-tools \  git

逐条解释这个大命令装了什么

包名
干什么
gcc-arm-none-eabi
ARM 交叉编译器全家桶(含 gcc/g++/objcopy/size/ar/ld…)
libnewlib-arm-none-eabi
针对裸机的 C 标准库(printf/malloc 之类的实现)
libstdc++-arm-none-eabi-newlib
C++ 标准库支持(写 C++ 才需要,装上不亏)
make
 / cmake
构建工具
gdb-multiarch
调试器,必须装,Cortex-Debug 靠它
openocd
烧录与在线调试的 GDB server
stlink-tools
命令行烧录(st-flash / st-info)
git
版本管理

[!warning] 重要:OpenOCD 版本与芯片支持apt 装的 openocd 是 0.12.0。如果你用很新的芯片(如 STM32H5 / STM32U5),可能需要从 openocd 官方 编译更新版。本笔记实测 F1/F4 系列,apt 版完全够用。

装完立刻验证

arm-none-eabi-gcc --version# 应输出 13.2.1make --version# GNU Make 4.3gdb-multiarch --version# GNU gdb 15.xopenocd --version0.12.0st-flash --version# v1.8.0

3. 第二步:配置 USB 调试器权限(udev 规则)

不配这步,插上 ST-Link 会报「无权限访问」。装好 stlink-tools 后,规则文件通常已就位,但要确认 + 重载:

# 1. 确认规则文件存在(装 stlink-tools 时自带)ls /lib/udev/rules.d/ | grep stlink#   应看到: 49-stlinkv1.rules  49-stlinkv2.rules  49-stlinkv2-1.rules  49-stlinkv3.rules# 2. 如果用的是 ARM 官方/SEGGER 调试器,补一条 ST 官方规则(可选)#    下载: https://wiki.st.com/stm32mcu/wiki/Getting_started_with_STM32CubeIDE#USB_driver_installation#    拷到 /etc/udev/rules.d/ 后执行下面的重载命令# 3. 重载规则 + 触发sudo udevadm control --reload-rulessudo udevadm trigger

插上开发板后验证设备是否被识别

lsusb | grep -i stlink# 看到 ST-Link 设备ls /dev/stlink* 2>/dev/null# 可能有 st-link 设备节点st-info --probe# 应列出连接的 ST-Link 和目标芯片

[!note] 拔插后仍无权限?把当前用户加入 plugdev/dialout 组(Ubuntu 24.04 通常默认已加):

sudo usermod -aG plugdev,dialout $USER

然后注销重新登录才生效。


4. 第三步:安装 STM32CubeMX

CubeMX 是 ST 官方的图形化配置工具,基于 Java,但安装包自带 JRE,无需单独装 Java

安装步骤

  1. 下载:访问官网 https://www.st.com/en/development-tools/stm32cubemx.html,需要注册/登录 ST 账号,下载 Linux 版en.STM32CubeMX_v6.xx.linux.zip 或直接 STM32CubeMX 安装程序 .sh)。
  2. 解压并运行安装程序bash    cd ~/Downloads    unzip en.stm32cubemx*.zip -d cubemx_installer    chmod +x cubemx_installer/SetupSTM32CubeMX-*.linux    ./cubemx_installer/SetupSTM32CubeMX-*.linux    
  3. 按图形向导下一步:默认安装到 ~/STM32CubeMX(本机即此路径)。一路 Next,勾选同意协议即可。
  4. 启动bash    ~/STM32CubeMX/STM32CubeMX

    或者从应用菜单找 "STM32CubeMX" 图标    

[!tip] 想要命令行启动更方便?加个别名到 ~/.bashrc

echo ”alias cubemx='~/STM32CubeMX/STM32CubeMX &>/dev/null &'” >> ~/.bashrcsource ~/.bashrc

之后终端敲 cubemx 即可启动。

CubeMX 第一次启动要做的

启动后会提示更新固件包(Firmware Package),比如 STM32Cube_FW_F1_V1.8.x。点确认下载——这是各系列芯片的 HAL 库源码,CubeMX 生成工程时要拷贝它。默认存放在 ~/STM32Cube/Repository/。

[!warning] 固件包很大(几百 MB ~ 上 GB)国内下载慢的话,可在 CubeMX 菜单 Help → Updater Settings 里设置代理,或手动从 ST 官网下载 .zip 后解压到 ~/STM32Cube/Repository/,再在 CubeMX 里指定路径。


5. 第四步:安装 VSCode 插件

在 VSCode 里 Ctrl+Shift+X 打开扩展面板,搜索并安装以下插件(按重要程度排序):

插件名
ID
作用
必装?
C/C++
ms-vscode.cpptools
代码补全、跳转、语法高亮、IntelliSense
✅ 必装
Cortex-Debug
marus25.cortex-debug
STM32 调试核心:断点/单步/寄存器/变量
✅ 必装
Makefile Tools
ms-vscode.makefile-tools
Makefile 工程辅助
推荐
CMake Tools
ms-vscode.cmake-tools
若用 CMake 工程则装
可选
Embedded IDE(可选)
cl.eide
集成度更高的嵌入式插件(非必需)
可选

命令行一键安装核心三个:

code --install-extension ms-vscode.cpptoolscode --install-extension marus25.cortex-debugcode --install-extension ms-vscode.makefile-tools

6. 第五步:用 CubeMX 生成 Makefile 工程(实战)

这是把「配置」变成「能编译的代码」的关键一步。

6.1 新建工程

  1. 打开 CubeMX → File → New Project
  2. 搜索你的芯片型号(例如 STM32F103C8T6 → 输 STM32F103C8)→ 选中 → 右上角 Start Project

6.2 配置外设(举例:点亮 LED + 串口)

  • Pinout 视图:点芯片引脚,选功能(如 PC13 设为 GPIO_Output)。
  • SYSDebug 设为 Serial Wire务必设!否则烧录一次后 ST-Link 连不上)。
  • RCCHigh Speed Clock (HSE) 设为 Crystal/Ceramic Resonator
  • 按需配置 USART、TIM、GPIO……(本笔记不展开,可参考 [[stm32开发与学习/stm32相关调试技巧/stm32 printf重定向UART]])

6.3 时钟配置(关键)

切到 Clock Configuration 标签,让 CubeMX 自动求解。确保HCLK达到目标主频(如 F103 的 72 MHz)。这一步直接影响 SystemClock_Config,配错程序会跑飞。

6.4 项目设置 —— 选 Makefile(本方案核心!)

切到Project Manager标签:

设置项
选 / 填
说明
Project Nameblink
(随意)
工程名,也是输出 elf 的名字
Project Location/home/你的用户名/stm32project/
存放目录
Toolchain / IDEMakefile
 ⭐
必须选这个!不是 STM32CubeIDE

展开 Code Generator:

设置项
勾选
说明
STM32Cube MCU packages…
✅ Copy only the necessary library files
不全拷,省空间
Generate peripheral initialization…
✅ as a pair of '.c/.h'
每个外设独立文件,清晰
Keep User Code when re-generating
重生成时保留你写的代码(USER CODE 区块)

6.5 生成代码

右上角 GENERATE CODE → 完成。用 VSCode 打开工程目录:

code ~/stm32project/blink

生成的目录结构(典型):

blink/├── blink.ioc# CubeMX 工程文件,以后改配置用它├── Makefile# ⭐ 自带构建脚本,直接 make 就能编译├── Core/│   ├── Inc/# main.h stm32f1xx_it.h …│   └── Src/# main.c stm32f1xx_it.c system_stm32f1xx.c├── Drivers/# HAL 库 + CMSIS│   ├── CMSIS/│   └── STM32F1xx_HAL_Driver/└── build/# make 后生成,含 .elf/.bin/.hex/.map

[!success] CubeMX 生成的 Makefile 是自包含的它已经写好了编译器路径、头文件、链接脚本(.ld)、启动文件(startup_*.s)。你不需要手写任何编译配置,make 一下就能出 .elf


7. 第六步:配置 VSCode(.vscode 三件套)

在工程根目录建 .vscode/ 文件夹,放三个文件。这三个文件是新手最容易卡的地方,下面给可直接用的模板

[!important] 把模板里的「你的工程名」替换成实际工程名CubeMX 生成的 elf 叫 工程名.elf(即 Project Name)。例如工程叫 blink,elf 就是 build/blink.elf

7.1 c_cpp_properties.json —— 智能提示配置

让 VSCode 找到 HAL 库头文件、识别芯片宏。defines 要和你的芯片/Makefile 对应(从 Makefile 的 C_DEFS 段抄)。

{    ”version”: 4,    ”configurations”: [        {            ”name”: ”STM32”,            ”includePath”: [                ”${workspaceFolder}/**”,                ”${workspaceFolder}/Core/Inc”,                ”${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc”,                ”${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy”,                ”${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include”,                ”${workspaceFolder}/Drivers/CMSIS/Include”            ],            ”defines”: [                ”USE_HAL_DRIVER”,                ”STM32F103xB”            ],            ”intelliSenseMode”: ”gcc-arm”,            ”compilerPath”: ”/usr/bin/arm-none-eabi-gcc”,            ”cStandard”: ”c11”,            ”cppStandard”: ”c++17”        }    ]}

[!tip] 怎么知道 defines 填什么?打开工程的 Makefile,找 C_DEFS 段,里面会有类似 -DUSE_HAL_DRIVER -DSTM32F103xB,把宏名抄进上面的 defines 数组即可。

  • STM32F103xB
    :64KB Flash 的 F103(如 C8T6 实际是 64K 档)
  • STM32F103xH
    :大容量
  • F4 系列同理:STM32F407xx 等。

7.2 tasks.json —— 编译/烧录任务

{    ”version”: ”2.0.0”,    ”tasks”: [        {            ”label”: ”build”,            ”type”: ”shell”,            ”command”: ”make -j$(nproc)”,            ”group”: { ”kind”: ”build”, ”isDefault”: true },            ”problemMatcher”: [”$gcc”],            ”detail”: ”编译工程”        },        {            ”label”: ”clean”,            ”type”: ”shell”,            ”command”: ”make clean”,            ”problemMatcher”: [],            ”detail”: ”清理 build 目录”        },        {            ”label”: ”rebuild”,            ”type”: ”shell”,            ”command”: ”make clean && make -j$(nproc)”,            ”problemMatcher”: [”$gcc”],            ”detail”: ”重新编译”        },        {            ”label”: ”flash-openocd”,            ”type”: ”shell”,            ”command”: ”openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c \”program build/${workspaceFolderBasename}.elf verify reset exit\””,            ”dependsOn”: ”build”,            ”problemMatcher”: [],            ”detail”: ”用 OpenOCD + ST-Link 烧录(推荐,带校验)”        },        {            ”label”: ”flash-stflash”,            ”type”: ”shell”,            ”command”: ”st-flash write build/${workspaceFolderBasename}.bin 0x08000000”,            ”dependsOn”: ”build”,            ”problemMatcher”: [],            ”detail”: ”用 st-flash 烧录 .bin 到 0x08000000”        }    ]}

[!note] 烧录地址 0x08000000这是 STM32 主 Flash 的起始地址(几乎所有 STM32 都一样)。.bin 文件没有地址信息,所以必须指定起始地址;.elf/.hex 自带地址,用 OpenOCD 烧 .elf 最省心。

[!warning] target 配置文件要按芯片系列改tasks.json 和下面的 launch.json 里 target/stm32f1x.cfg 要换成你的芯片系列:

芯片
target 文件
STM32F103/F105/F107
target/stm32f1x.cfg
STM32F407/F411/F429
target/stm32f4x.cfg
STM32G4
target/stm32g4x.cfg
STM32H7
target/stm32h7x.cfg
STM32L4
target/stm32l4x.cfg
在 /usr/share/openocd/scripts/target/ 目录能查到全部可选文件。

7.3 launch.json —— 在线调试(断点/单步/变量)

这是最值钱的文件。配好后按 F5 就能打断点调试。

{    ”version”: ”0.2.0”,    ”configurations”: [        {            ”name”: ”Debug (OpenOCD + ST-Link)”,            ”type”: ”cortex-debug”,            ”request”: ”launch”,            ”cwd”: ”${workspaceFolder}”,            ”executable”: ”${workspaceFolder}/build/${workspaceFolderBasename}.elf”,            ”servertype”: ”openocd”,            ”serverpath”: ”openocd”,            ”gdbPath”: ”gdb-multiarch”,            ”device”: ”ST-Link”,            ”configFiles”: [                ”interface/stlink.cfg”,                ”target/stm32f1x.cfg”            ],            ”searchDir”: [”/usr/share/openocd/scripts”],            ”runToEntryPoint”: ”main”,            ”showDevDebugOutput”: ”raw”,            ”svdFile”: ””        }    ]}

关键字段解释

字段
说明
executablebuild/工程名.elf
必须先编译,elf 带调试符号
servertypeopenocd
用 OpenOCD 作 GDB server
gdbPathgdb-multiarch
⭐ Ubuntu 关键!不是 arm-none-eabi-gdb
configFiles
stlink + 芯片 target
OpenOCD 要的硬件配置
searchDir/usr/share/openocd/scripts
OpenOCD 脚本根目录
runToEntryPointmain
启动后自动运行到 main,在 main 打断点

[!tip] 想看寄存器?Cortex-Debug 调试时左侧会自动出现 REGISTER / WATCH / VARIABLES 面板。想看外设寄存器,下载对应芯片的 .svd 文件填到 svdFile,即可图形化查看外设寄存器。SVD 文件在 CubeMX 固件包里能找到。


8. 完整工作流速览(日常开发就这几步)

操作对应

  1. 改外设配置 → 回 CubeMX 改 .ioc → GENERATE CODE(你的 USER CODE 不会丢)。
  2. 写业务代码 → 在 VSCode 的 USER CODE BEGIN/END 区块内写。
  3. 编译 → Ctrl+Shift+B → 选 build(或直接回车,它已是默认)。
  4. 调试 → 打断点 → F5(Cortex-Debug 自动编译→烧录→停在 main)。
  5. 只烧录不调试 → Ctrl+Shift+P → Tasks: Run Task → flash-openocd

9. 一键自检脚本(环境体检)

把下面存成 check_stm32_env.sh,随时检查环境是否完整:

#!/bin/bashgreen=”\033[32m”; red=”\033[31m”; reset=”\033[0m”check() {    if command -v ”$1” >/dev/null 2>&1; then        echo -e ”${green}[✓]${reset} $1 → $(command -v $1)”    else        echo -e ”${red}[✗]${reset} $1 未安装”    fi}echo ”=== STM32 开发环境自检 ===”check arm-none-eabi-gcccheck arm-none-eabi-objcopycheck arm-none-eabi-sizecheck makecheck cmakecheck gdb-multiarchcheck openocdcheck st-flashcheck codeecho ””echo ”=== CubeMX ===”[ -x ”$HOME/STM32CubeMX/STM32CubeMX” ] && echo -e ”${green}[✓]${reset} STM32CubeMX 已安装” || echo -e ”${red}[✗]${reset} 未找到 ~/STM32CubeMX”echo ””echo ”=== udev 规则 ===”ls /lib/udev/rules.d/ | grep -q stlink && echo -e ”${green}[✓]${reset} ST-Link udev 规则存在” || echo -e ”${red}[✗]${reset} 缺少 udev 规则”echo ””echo ”=== VSCode 嵌入式插件 ===”code --list-extensions 2>/dev/null | grep -q cortex-debug && echo -e ”${green}[✓]${reset} Cortex-Debug” || echo -e ”${red}[✗]${reset} 缺 Cortex-Debug”code --list-extensions 2>/dev/null | grep -q cpptools && echo -e ”${green}[✓]${reset} C/C++” || echo -e ”${red}[✗]${reset} 缺 C/C++”

运行:

chmod +x check_stm32_env.sh./check_stm32_env.sh

全绿即环境就绪。


10. 常见问题(FAQ)

Q1:make 报错 arm-none-eabi-gcc: not found

工具链没装好,回到第 2 步重装 gcc-arm-none-eabi,并确认 arm-none-eabi-gcc --version 能输出版本。

Q2:调试报错 arm-none-eabi-gdb not found / Couldn't find gdb

99% 是gdbPath写成了arm-none-eabi-gdb。Ubuntu 上改成 gdb-multiarch(见 7.3)。

Q3:OpenOCD 报 Error: open failed / no device found

  • 检查 ST-Link USB 线(要数据线,不是充电线)。
  • lsusb | grep -i stlink
     看设备在不在。
  • 回第 3 步检查 udev 规则 + 用户组权限。
  • 确认 CubeMX 里 SYS → Debug = Serial Wire,否则芯片 SWD 被关,连不上(解决方法见 [[stm32开发与学习/stm32相关调试技巧/stm32 无法烧录的解决办法(使用boot)]])。

Q4:烧录一次后 ST-Link 就连不上了

芯片的 SWD 引脚被你的代码重新复用成 GPIO 了,或 SYS→Debug 没设 Serial Wire。用BOOT0=1进入串口/ISP 模式擦除恢复。详见 [[stm32开发与学习/stm32相关调试技巧/stm32 无法烧录的解决办法(使用boot)]]。

Q5:VSCode 红波浪线一片(找不到 HAL 头文件)

c_cpp_properties.json 的 includePath 没覆盖到所有头文件目录,或 defines 的芯片宏不对。打开 Makefile 的 C_INCLUDES 和 C_DEFS,对照补全。

Q6:CubeMX 重新生成代码后,我写的代码没了?

必须写在 /* USER CODE BEGIN xxx / 和 / USER CODE END xxx */ 之间,CubeMX 只保留这些区块内的内容。

Q7:串口看不到 printf 输出?

需要重定向 fputc 并勾选 Use MicroLIB(Keil)或对 GCC 实现 _write/__io_putchar。参考 [[stm32开发与学习/stm32相关调试技巧/stm32 printf重定向UART]]。


11. 进阶:CMake 工程(可选)

较新版本的 CubeMX 支持 Toolchain/IDE = CMake。如果你更习惯 CMake:

  1. CubeMX 里 Project → Toolchain 选 CMake(无则用 Makefile,二者皆可)。
  2. 工程根目录会出现 CMakeLists.txt 和一个 cmake/ 工具链文件。
  3. VSCode 用 CMake Tools 插件,选 arm-none-eabi-gcc 工具链 kit,即可 F7 编译。
  4. 调试配置同第 7.3 节,只是 executable 路径变成 build/工程名.elf(CMake 输出目录可能不同,按实际改)。

[!note] 新手建议先用 MakefileCubeMX 的 Makefile 方案最成熟、踩坑最少。等熟悉了再迁移 CMake。本机实测 Makefile 工程 make -j8 几秒编译完。


12. 本机实测环境快照

[!summary] 写作本笔记时的真实环境以下即「全绿」状态,可作为对照基准:

  • OS:Ubuntu 24.04.4 LTS (x86_64)
  • VSCode:1.127.0,插件 cpptools / cortex-debug / cmake-tools / makefile-tools 等
  • arm-none-eabi-gcc:13.2.1(apt gcc-arm-none-eabi 15:13.2.rel1-2
  • newlib:4.4.0 | make:4.3 | cmake:3.28.3
  • gdb-multiarch:15.1 ⭐(调试器)
  • openocd:0.12.0(/usr/local/bin/openocd,脚本 /usr/share/openocd/scripts
  • stlink:v1.8.0(st-flash / st-info)
  • STM32CubeMX:6.16(~/STM32CubeMX,自带 JRE)
  • Java:OpenJDK 21(系统级,CubeMX 自带的不依赖它)
  • udev:ST-Link V1/V2/V2-1/V3 规则齐全

附录 A:Windows + WSL2 用户适配

[!info] 谁需要看这一节如果你被迫用 Windows、又想要 Linux 工具链的体验(arm-none-eabi-gcc / make / openocd),可以在 WSL2 里跑这套方案。物理机 Linux 用户(本笔记主场景)可直接跳过本节。

A.1 一句话结论

能用,方案成熟(微软官方支持)。但要分环节看:编译、CubeMX 图形界面、串口监控几乎零障碍,只有「USB 烧录 + 在线调试」这一步需要用usbipd-win做设备直通,外加几个小坑。

环节
WSL2 支持度
说明
make
 / arm-none-eabi-gcc 编译
✅ 完美
完整 Linux,本笔记第 2 步命令原样照搬
CubeMX 图形界面
✅ 能跑
Win11 的 WSLg 直接显示 Linux GUI,免装 X server
串口看 printf
✅ 能跑
设备直通后出现 /dev/ttyACM0,minicom 正常用
USB 烧录 + 在线调试
⚠️ 需额外一步
ST-Link 是 USB 设备,WSL 默认看不到,需 usbipd-win 直通

A.2 三条路线(按推荐度)

路线
做法
适合谁
A. 全在 WSL2 ⭐
usbipd
 把 ST-Link 直通进 WSL,烧录/调试全在 WSL 跑
想要一体化 Linux 体验、能接受少量 USB 折腾
B. WSL 编译 + Win 烧录 ⭐
WSL 只 make 出 .elf/.bin,烧录用 Win 端 STM32CubeProgrammer
稳定优先,不想碰 USB 直通
C. 物理机 Linux ⭐⭐
本笔记主场景,USB 原生直通,零额外开销
最优解

[!tip] 路线 B 为什么最省心烧录器始终在 Windows 原生驱动下工作,最稳。代价只是 WSL 编译出的 .bin 要拿到 Windows 端烧——用 VSCode Remote-WSL 编辑,文件在 \\wsl$\... 路径下 Windows 可直接访问,基本无感。

A.3 路线 A 全链路:usbipd-win 直通三步

① Windows 端(PowerShell 管理员)装并绑定设备:

winget install --interactive dorssel.usbipd-win# 装 usbipd-winusbipd list# 找到 ST-Link 的 BUSIDusbipd bind --busid# 绑定(每设备只需一次)usbipd attach --wsl --busid# 转交给 WSL# 想拔插自动转交:usbipd attach --wsl --busid  --auto-attach

② WSL2 端确认设备到位,再装工具链(命令同本笔记第 2 步):

sudo apt install -y gcc-arm-none-eabi libnewlib-arm-none-eabi make gdb-multiarch openocd stlink-toolslsusb# 看到 ST-Link → 直通成功st-info --probe# 能列出目标芯片

③ VSCode +.vscode三件套原样套用(见第 7 节)—— WSL 里同样要装 gdb-multiarch,gdbPath 同样写 gdb-multiarch。用 VSCode 的Remote-WSL打开工程目录即可,编译/调试体验与物理机一致。

A.4 ⚠️ 全 WSL 路线的 4 个坑

  1. 互斥占用:ST-Link attach 到 WSL 后,Windows 端不能同时用(含 ST 官方 GUI)。要取回:usbipd detach --busid <BUSID>
  2. 拔插 / 重启失效:USB 一断就要重新 attach。用 --auto-attach 保持常驻。
  3. ST-Link V3 偶发连接失败:V3 是复合设备(调试 + VCP + …),社区报告过 OpenOCD 连不上,需把整个复合设备一起 attach;V2 / V2-1 最省心。
  4. 内核版本:需较新的 WSL2 内核(支持 USB/IP),先 wsl --update 升级一次。

A.5 WSL 参考资料

  • Microsoft Learn — 在 WSL2 中连接 USB 设备(官方)
  • usbipd-win Wiki — WSL support
  • McUonEclipse 2025 — 在 WSL2/Docker 里用 USB 调试探针

13. 参考与延伸阅读

  • ST 官方
  • OpenOCD 手册
  • Cortex-Debug Wiki
  • ARM GCC 工具链
  • 本 vault 相关笔记:
    • [[stm32开发与学习/README]]
    • [[stm32开发与学习/stm32相关调试技巧/stm32 linux环境下的调试方法(使用stlink)]]
    • [[stm32开发与学习/stm32相关调试技巧/stm32 无法烧录的解决办法(使用boot)]]
    • [[stm32开发与学习/stm32相关调试技巧/stm32 printf重定向UART]]

[!quote] 一句话总结sudo apt install 装齐工具链 + 插件 → CubeMX 选 Makefile 生成工程 → VSCode 配 .vscode 三件套(记得 gdb-multiarch)→ Ctrl+Shift+B 编译 / F5 调试。 就这么个闭环,配一次,受益一辈子。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:38:41 HTTP/2.0 GET : https://f.mffb.com.cn/a/510359.html
  2. 运行时间 : 0.420517s [ 吞吐率:2.38req/s ] 内存消耗:4,720.83kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0a9d0f58a6dcbcafc416c98d83c28860
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001139s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001647s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.043443s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001255s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001477s ]
  6. SELECT * FROM `set` [ RunTime:0.012614s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001826s ]
  8. SELECT * FROM `article` WHERE `id` = 510359 LIMIT 1 [ RunTime:0.023475s ]
  9. UPDATE `article` SET `lasttime` = 1787290721 WHERE `id` = 510359 [ RunTime:0.060392s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.002753s ]
  11. SELECT * FROM `article` WHERE `id` < 510359 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001668s ]
  12. SELECT * FROM `article` WHERE `id` > 510359 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002232s ]
  13. SELECT * FROM `article` WHERE `id` < 510359 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.068304s ]
  14. SELECT * FROM `article` WHERE `id` < 510359 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004647s ]
  15. SELECT * FROM `article` WHERE `id` < 510359 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.016572s ]
0.424179s