巧用断点设置查找bug【debug】

devtools/2024/11/6 17:20:44/

默认设置的断点,当代码运行到断点处MCU就会被挂起,从而停在断点处。
但在某些情况下,如调试FCCU时,如果设置断点,MCU停下后将会导致
FCCU 配置WDG超时。或在调试类似电机控制类的应用时,不适当的断点会导
致三相波某相高边和底边同时打开导致短路。这类情况我们可以改变断点的类
型,当代码运行到断点处,MCU不会Halt,可以通过Debugger Console查看
代码是否有运行到断点。

  1. 巧用debug控制台查看断点执行情况

通过Run->Breakpoint Types,选择断点类型为Dynamic_Printf。在 line 101 设
置断点。全速运行,可以看到MCU不会STOP,通过Debugger Console可以
看到代码有运行到Line 101

  1. 条件断点

条件断点是一种可以设置条件属性,满足一定条件才会触发的断点。条件可以
是某个变量被设置为某个值,也可以是外设某个状态位置位,也可以是它们的
形成的逻辑组合

全速运行,可以看到当DelayTimer的值为20的时候,MCU停在了断点处,再 次全速运行,MCU将不会停下来。因为条件不再满足

  1. 数据断点

调试MCU软件时,经常会遇到这类问题,某个全局变量被意外的修改了,由
于软件庞大,调用关系复杂,变量多处访问,在调试这种问题是,通常做法是
不断的放断点,查看变量的值。这种调试方法不是特别的高效。我们可以通过
另外的方式快速定位变量异常赋值的地方。这种方式就是用Watchpoint。
Watchpoint 也被叫做数据断点。可以通过Watchpoint捕获变量被读,或被写
的位置。还可以更进一步通过设置条件,在变量被改为某个具体值的时候暂停
代码运行。

选中想要监视的变量,Run->Toggle Watchpoint, 打开 Watchpoint 属性配置窗口
也可以在Outline,选中变量,然后鼠标右键,在弹出的菜单里选择Toggle
Watchpoint.


这里我们配置捕获变量testVar的写访问,且捕捉testVar被置为0的时候。
配置完后,可以在Breakpoints看到该Watchpoint

全速运行,会看到代码停在了testVar的下一条语句。同时在Console可以看到
Watchpoint 被捕获到。Debugger Console 可以看到调试器抛了一个SIGTRAP
信号,停止了代码的运行。


http://www.ppmy.cn/devtools/15619.html

相关文章

体验一下使用 ArkUI 进行 HarmonyOS 开发并与 Compose 简单对比

作者:equationl 前言 最近几年各个技术公众号和技术群都在唱衰原生安卓开发,疯狂贩卖焦虑。 搞得我也焦虑的不行,在谷歌的 Compose 推出后就赶紧去学,但是又觉得好像 Compose 的热度也不算太高,又去学 Flutter 。 转…

SQL获取最后一次的数据

问题 有个表格(id,machineName,value,updatetime),里面比如有10个机台,里面记录了这10个机台的几十万条数据 如何获取每个机台的最后一笔数据? machines表 解决办法 1.首先获得每个机台最后的更新时间 select machineName,max(updatetim…

花粉过敏人群或超2亿?约克VRF中央空调助你健康鲜呼吸

“一朝春雨落,十里桃花开”,暖春、微风、阳光、花香……充满着生机的春天让人心情愉悦,然而对于易过敏人群来说却是“苦不堪言”,经常出现眼圈发红、发痒、睁不开,每天都在“流泪”中度过,同时伴随着咳嗽、打喷嚏、流鼻涕、鼻塞等症状,皮肤也可能会出现红疹、瘙痒等症状。 如何…

MyBatis基础操作

黑马程序员JavaWeb开发教程 文章目录 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发一、环境准备1、准备数据库表emp2、创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok&…

基于SpringBoot的合家云社区物业管理平台 - 数据库设计文档

合家云数据库设计文档V1.0 社区资产模块 社区表:hjy_community字段名称字段类型是否为空值字段释义community_idbigint(20)NO小区idcommunity_namevarchar(128)YES小区名称community_codevarchar(128)YES小区编码community_provence_codevarchar(32)YES省区划码community_cit…

GitLab存储空间满了

1. 背景 前两天同事反馈,代码推送不到服务器了,GitLab报500错误,我等了一天都变好。登录服务器查看GitLab虚拟机,发现磁盘满了。于是用如下命令释放出了一部分空间: journalctl --vacuum-time1s 释放了1秒前的日志&am…

关于SM2软件加密与硬件加密的问题

SM2国密算法在中国的密码学领域中使用得非常广泛,它是一种基于椭圆曲线公钥密码的算法。日常开发工作中,涉及到SM2算法的加密和解密时,如果一方使用软件实现,而另一方使用硬件实现,可能会遇到一些联调过程中的问题。在…

Linux CAN信号收发模拟

在Linux环境下进行CAN(Controller Area Network)信号的模拟收发通常需要使用一些工具和库。以下是一种可能的方法: SocketCAN驱动程序:SocketCAN是Linux内核中的一个子系统,提供了CAN总线的抽象接口,允许用…