浮云落笔

浮云落笔

首页
瞬间
反馈
浮云落笔

浮云落笔

首页 瞬间 反馈
  1. 首页
  2. stm32
  3. 2.4 编译产物与F5调试全流程

2.4 编译产物与F5调试全流程

  • stm32
  • 发布于 2026-09-14
  • 4 次阅读
flor
flor

一、编译成功的标志:size 汇总

make 输出的最后一行是 size 汇总,看到它就代表编译、链接全部通过:

text    data     bss     dec     hex filename
   4736      12    1644    6392    18f8 build/uart.elf

三个关键数的读法:

字段 含义 占用
text 代码 + 常量 占 Flash
data 已初始化变量 占 Flash,启动时拷进 SRAM
bss 清零变量 只占 SRAM

这三个数就是程序对 512KB Flash / 64KB SRAM 的占用量。

二、elf / hex / bin / map:一次编译全出

CubeMX Makefile 的 all 目标是 elf + hex + bin 三件套一起出,编译完去 uart/build/ 目录就能看到(连同 map 共四样):

文件 是什么 谁用它
uart.elf 带调试符号的完整档案 gdb(F5 调试、flash-remote.sh 烧录都吃这个)
uart.hex Intel HEX 文本格式,带地址信息 FlyMcu 等串口烧录工具
uart.bin 裸二进制镜像 部分烧录器 / OTA
uart.map 每个符号放在哪个地址的地图 查内存布局

三、调试:F5 全流程

先编译,再调试

Ctrl+Shift+B 编译。云端 launch.json 没配 preLaunchTask,F5 不会自动编译——改了代码直接 F5、现象没变,99% 是忘了编译(烧的还是旧 elf)。

启动与自动流程

  • F5 → 第一次会让你选调试配置,选 Remote openocd (frp)(之后记住选择不再问)
  • 自动流程:连隧道 → 复位 → 烧录 → 停在 main 入口

常用操作

操作 方式
断点 点行号左侧出现红点;F9 切换
继续 F5
单步跳过 F10
单步进入 F11
跳出 Shift+F11
结束调试 Shift+F5(干净退出,释放 openocd 连接)

左侧三个面板:

  • VARIABLES — 局部/全局变量实时值
  • WATCH — 右键变量 → Add to Watch
  • CALL STACK — 调用堆栈

DEBUG CONSOLE 里可以直接输表达式读寄存器,比如看 GPIOA 输出寄存器:

p/x *(volatile unsigned int*)0x4001080C

外设寄存器图形面板(CORTEX PERIPHERALS)目前 launch.json 还没配 svdFile,可能为空——用控制台表达式读完全够用,想图形化加一行配置即可。

两个正常现象

  1. 断点暂停 = 芯片被 halt,串口停发 abc;F5 继续后恢复
  2. 调试会话独占 openocd——F5 期间跑 flash-remote.sh 会连不上,先 Shift+F5 退出
目录
湘ICP备2025147565号-1
gongan beian 湘公网安备43102602000213号