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

news/2024/5/10 10:24:55

默认设置的断点,当代码运行到断点处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.mrgr.cn/p/32104326

相关文章

Ubuntu终端常用指令

cat cat 读取文件的内容 1、ls 一、 1、ll 显示当前目录下文件的详细信息,包括读写权限,文件大小,文件生成日期等(若想按照更改的时间先后排序,则需加-t参数,按时间降序(最新修改的时间排在最前)执行: $ ll -t, 按时间升序执行: $ ll -t | tac): ll 2、查看当前所处路径(完整…

朴素贝叶斯算法分类

def loadDataSet():postingList[[my, dog, has, flea, problems, help, please], #切分的词条[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, posting, stupid, worthless, garbage],[mr, licks, ate, my, steak, …

webpack 打包优化 - splitChunks

打包时会遇到的问题: 打包文件过大,首屏加载时间过长,js阻塞页面渲染导致白屏改动业务代码后,对于第三方库也会一并重新打包到一个出口文件,浏览器无法利用缓存来减少请求和加载的时间 针对以上两个问题,…

03-修饰符-监听属性-发送Ajax请求-生命周期钩子

事件修饰符事件修饰符 作用.stop 只处理自己的事件,父控件冒泡的事件不处理(阻止事件冒泡),一般用在子元素类上.self 只处理自己的事件,子控件冒泡的事件不处理,一般用在父元素上.prevent 阻止a连接的跳转.once 事件只会触发一次(适用于抽奖页面)使用修饰符时,顺序很重…

attempt to compare nil with number -- 黑马点评出现问题

问题情况 : 主要问题 : 调用lua执行redis时,有一个值会接受nil(因为redis中没有该数据)或者数值,当该值为nil时执行报错,因为会用到将该值与其他数字比较,故报错attempt to compare nil with number 当然…

数据结构 - 队列 [动画+代码注释超详解],萌新轻松上手!!!

一. 队列的概念 队列是一种特殊的线性表,用于存储元素,并且按照先进先出(First In First Out)的顺序进行管理,这意味着最先加入队列的元素将会是最先从队列中被移除的元素 队列的原型:只允许在一端进行插入数据的操作&#xff0c…

【项目实战】基于高并发服务器的搜索引擎

【项目实战】基于高并发服务器的搜索引擎 目录 【项目实战】基于高并发服务器的搜索引擎搜索引擎部分代码index.htmlindex.hpplog.hppparser.cc(用于对网页的html文件切分且存储索引关系)searcher.hpputil.hpphttp_server.cc(用于启动服务器和…

python作业 切片逆转

题目: (反转显示一个整数)编写下面的函数,反向显示一个整数。 列如:reserse(3456)。编写一个测试程序,提示用户输入一个整数,然后显示它的反向数。 第一步定义一个函数: def rev…

区块链安全应用------压力测试

测试要求: 1. 对以下AccountManager智能合约进行压测(基础要求set函数测试,balanceOf涵为20分加分项)2. 在本地链进行测试,需要监控本地进程的资源使用情况。每个进程的multiOutput属性为Avg3. 需要将每一个更改的配置文件截图,和…

vscode 打代码光标特效

vscode 打代码光标特效 在设置里面找到settings 进入之后在代码最下方加入此代码 "explorer.confirmDelete": false,"powermode.enabled": true, //启动"powermode.presets": "fireworks", // 火花效果// particles、 simple-rift、e…

鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元

任务即线程 在鸿蒙内核中,广义上可理解为一个任务就是一个线程 官方是怎么描述线程的 基本概念 从系统的角度看,线程是竞争系统资源的最小运行单元。线程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它线程运行。 鸿蒙内核每个…

Rust序列化和反序列化

Rust 编写python 模块 必备库 docker 启动 nginx 服务 NGINX 反向代理配置

蛋糕购物商城

蛋糕购物商城 运行前附加数据库.mdf(或使用sql生成数据库) 登陆账号:admin 密码:123456 修改专辑价格时去掉¥以及上传专辑图片 c#_asp.net 蛋糕购物商城 网上商城 三层架构 在线购物网站,电子商务系统 …

【Godot4.2】自定义Todo清单类 - myTodoList

概述 在写myList类的时候,就想到可以写一个类似的Todo清单类。 基础思路 本质还是在内部维护一个数组,在其基础上进行增删改查操作的封装为了方便存储数据,编写一个自定义内置类TodoItem,内部数组就变成了Array[TodoItem]类型的…

【前端开发基础知识快速入门】

前端开发基础知识&快速入门 一、VSCode 使用1.1 安装常用插件1.2 创建项目1.3 创建网页1.4 运行效果二、ES62.1 简介2.2 什么是 ECMAScript2.3 ES6 新特性2.3.1 let 声明变量2.3.2 const 声明常量(只读变量)2.3.3 解构表达式2.3.4 字符串扩展2.3.5 函数优化2.3.6 对象优化…

uniapp的bug们

1 uni-icons标签的数据绑定有问题 <uni-icons type="contact" class=" icon" size="25"></uni-icons><view>{{user_msg}}</view> <!-- 之所以不把{{user_msg}}写在uni-icons标签之内,是因为,uni-icons有一个bug,它不…

nvm基本使用

nvm基本使用 文章目录 nvm基本使用1.基本介绍2.下载地址3.常用指令 1.基本介绍 NVM是一个用于管理 Node.js 版本的工具。它允许您在同一台计算机上同时安装和管理多个 Node.js 版本&#xff0c;针对于不同的项目可能需要不同版本的 Node.js 运行环境。 NVM 主要功能&#xff…

easyExcel快速入门

目录 &#x1f9c2;1.简单介绍 &#x1f32d;2.快速入门 &#x1f953;1.导入依赖 &#x1f37f;2.导出到excel &#x1f38f;3.读入数据 &#x1f389;4.下载 1.简单介绍 传统操作Excel大多都是利用Apach POl进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多…

C语言学习/复习36

一、程序的环境与预处理 二、翻译环境与执行环境 三、运行环境 四、预编译(预处理)详解

docker 基本命令

目录 一、docker 镜像操作命令 1.1.查询软件镜像 1.2.docker pull&#xff1a;下载镜像 1.3.docker push&#xff1a;上传镜像 1.4.docker images&#xff1a;查看本地镜像 1.5.docker inspect &#xff1a;获取镜像详细信息 1.6.docker tag&#xff1a;添加镜像标签 …