写程序时遇到bug,光靠眼睛盯代码很难发现哪一步出错了。这时候,断点就是你的“暂停键”——让程序跑到某一行自动停住,你就能看清变量值、执行路径,甚至一步步往下走。
断点不是硬件操作,是软件调试功能
有人看到“硬件维护”栏目,会疑惑:断点跟硬件有啥关系?其实,日常维修电脑、排查外设通信异常(比如串口调试单片机、USB设备固件交互)时,工程师常要抓取设备驱动或嵌入式代码的运行状态,这时候就得在开发环境里打上断点,观察数据怎么传、寄存器怎么变。它虽不拧螺丝,却是硬件问题定位的关键一环。
主流工具怎么设断点?
以最常用的 VS Code 为例:打开源码文件,在想暂停的那行左侧灰色区域单击,出现一个红点,断点就设好了。运行调试(F5 或点击绿色三角形),程序执行到这一行就会停下。
IntelliJ IDEA 或 Android Studio:把光标停在某行,按 Ctrl + F8(Windows/Linux)或 Cmd + F8(Mac),同样会出现红色圆点。
Visual Studio:直接点击代码行号左侧的空白处,或者把光标放在该行按 F9。
小技巧:条件断点和日志断点
不是所有断点都要“一停就停”。比如循环执行1000次,你只关心第500次 i == 500 时的状态,可以右键断点 → “编辑断点”,填入条件:
i == 500还有些场景不需要暂停,只想看某行执行了没、变量值是多少,那就用“日志断点”(Logpoint):右键断点 → “编辑日志断点”,输入类似
当前i值:{i},buffer长度:{buffer.length}运行时它不中断,只往控制台打日志,特别适合高频调用又不想打断流程的情况。嵌入式调试也一样,只是环境稍不同
用 Keil、IAR 或 PlatformIO 调 STM32、ESP32 时,断点设置逻辑一致:连接好调试器(比如 ST-Link、J-Link),加载固件后,在源码行点一下照样加断点。唯一要注意的是——有些优化等级(如 -O2)会让编译器删掉看似“无用”的变量或合并语句,导致断点无法命中或变量显示为 <optimized out>。这时把编译选项调成 -O0,问题通常就没了。