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

默认设置的断点,当代码运行到断点处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.mzph.cn/web/1666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复合升降机器人教学科研平台——技术方案

一:功能概述 1.1 功能简介 复合升降机器人是一款集成移动底盘、机械臂、末端执行器、边缘计算平台等机构形成的教学科研平台,可实现机器人建图导航、路径规划,机械臂运动学、动力学、轨迹规划、视觉识别等算法功能和应用,提供例如…

C语音——不要解引用未初始化的指针

解引用:*pt得到指针指向地址上储存的值。 int *pt;*pt 5; 创建一个指针时,系统只分配了储存指针本身的内存,并未分配储存数据的内存。若直接用5赋值*pt,由于pt未初始化地址,其地址是随机值&a…

Python中列表数据的保存与读取:以txt文件为例

目录 引言 一、列表数据的保存 二、列表数据的读取 三、进阶用法与注意事项 1. 处理嵌套列表 2. 处理大量数据 3. 注意事项 四、总结 引言 在Python编程中,我们经常需要处理各种类型的数据,包括列表。列表是一种非常灵活的数据结构,…

边缘计算的优势

边缘计算的优势 边缘计算是一种在数据生成地点附近处理数据的技术,而非传统的将数据发送到远端数据中心或云进行处理。这种计算模式对于需要快速响应的场景特别有效,以下详述了边缘计算的核心优势。 1. 降低延迟 边缘计算通过在数据源近处处理数据&…

npm config set registry切换npm镜像源

要切换 npm 镜像源,可以使用 npm config set registry 命令。以下是切换到官方的 npm 镜像源的步骤: 查看当前 npm 镜像源: npm config get registry如果当前的镜像源不是官方的 npm 镜像源(https://registry.npmjs.org/&#xff…

java学习笔记3

5. 多重循环和程序调试 5.1 多重循环 多重循环是指循环中嵌套循环结构 多重循环注意事项 各种循环可以互相嵌套一般不要超过三层嵌套外层循环变化一次,内层循环要全部执行完代码 **需求1:**使用循环嵌套输出10*10的矩形 public static void demo() {for (int i = 0; i <…

imx6ull设备树驱动--pinctl、ioctl

添加pinctl节点 进入arch/arm/boot/dts目录下dts文件 在iomuxc下添加pinctlled节点 将 GPIO1_IO03 这个 PIN 复用为 GPIO1_IO03&#xff0c;电气属性&#xff08;配置GPIO一些列寄存器&#xff09;值为 0X10B0 添加led设备节点 与上一节一样&#xff0c;在 / 下面添加设备节…

数电期末复习(四)组合逻辑电路

这里写目录标题 4.1 概述4.2 组合逻辑电路的分析方法4.3 组合逻辑电路的设计方法4.4 若干常用组合逻辑电路4.4.1 编码器&#xff08;encoder&#xff09;4.4.2 译码器(decoder)4.4.3 数据选择器 (data selector)4.3.4 加法器&#xff08;Adder&#xff09;4.4.4 数值比较器&…

4.21总结

由于之前的项目没有使用服务器搭建&#xff0c;这两天进行了一些修改&#xff0c;以服务器为中端进行搭建&#xff0c;登录注册等功能从直接与数据库关联改为由服务器进行&#xff08;直接关联只能在自己的端口进行修改&#xff0c;放在别人电脑上就无法进行&#xff09; 顺遍…

kubectl常用命令行介绍

1、kubectl用法概述 kubectl命令⾏的语法如下&#xff1a; $ kubectl [command] [type] [name] [flags] command&#xff1a;命令&#xff0c;用于操作Kubernetes集群资源对象的命令&#xff0c;例如create、delete、describe、get、apply等TYPE&#xff1a;资源对象的类型&am…

OpenHarmony UI开发-ohos-svg

简介 ohos-svg是一个SVG图片的解析器和渲染器&#xff0c;解析SVG图片并渲染到页面上。它支持大部分 SVG 1.1 规范&#xff0c;包括基本形状、路径、文本、样式和渐变,它能够渲染大多数标准的 SVG 图像。ohos-svg的优点是性能好、内存占用低。 效果展示 SVG图片解析并绘制: …

Python基本类型

1、Java基本类型 在java里&#xff0c;总共有8种基本类型&#xff0c;分别是&#xff1a; boolean&#xff1a;布尔类型&#xff0c;只有两个值true和false。char&#xff1a;字符类型&#xff0c;占用2个字节&#xff0c;用来表示一个单一的字符。byte&#xff1a;字节类型&…

uni-app HBuilderX通过easycom省略import自动导入自定义组件

快速尝试 自HBuilderX 2.5.5起支持easycom组件模式。更新HBuilderX即可尝试。 easycom默认已启用&#xff0c;并对项目下的components和uni_modules目录开启自动扫描&#xff0c;对符合下面路径和命名规则的组件自动导入。 components/组件名/组件名.vue uni_modules/组件名/…

使用飞桨快速部署stable diffusion模型

这可以说是最快的部署stable diffusion模型的方法了&#xff0c;而且星河社区还有免费的GPU算力提供&#xff0c;这样再也不用担心没有算力了&#xff01; 操作方法&#xff1a; # 安装相关库 pip install docarray0.21.0 pip install paddlehub# 初始化 from PIL import Imag…

踊跃参与,您有机会尊享300000水晶奖励!【AI书童】代言形象大投票活动开启~~~

【AI书童】运营官 未来智慧人工智能 2024-04-19 09:55 ✧ 快来选出你心目中的【AI书童】 ✦ 我们想为【AI书童】选择一个形象代言&#xff0c;使用【AI书童】软件生成了一部分形象照片。大家觉得哪个书童最合适呢&#xff1f;希望你们能给出宝贵的建议&#xff01; 【AI书童…

手把手教你实现 OceanBase 数据到 Apache Doris 的便捷迁移|实用指南

作者|SelectDB 技术团队 作为广受认可的分布式数据库&#xff0c;OceanBase 已在众多企业关键业务系统中得到广泛应用。在 Apache Doris 社区&#xff0c;有众多用户选择基于 OceanBase 与 Apache Doris 以构建强大的数据处理与分析链路&#xff0c;本文将详细介绍如何便捷高效…

在ts中const和readonly区别?

在TypeScript中&#xff0c;const和readonly是两种不同的属性修饰符&#xff0c;它们各自有特定的用途和语义。 const关键字在TypeScript中用于声明常量&#xff0c;即一个值在初始化后不能再被改变的变量。这意味着一旦你为一个const变量赋值&#xff0c;你就不能再次为它赋一…

Java反序列化-CC3链

前言 前面的CC1与CC6链都是通过 Runtime.exec() 进行命令执行的。当服务器的代码将 Runtime放入黑名单的时候就不能使用了。 CC3链的好处是通过动态加载类的机制实现恶意类代码执行。 版本限制 jdk8u65Commons-Collections 3.2.1 动态类加载 loadClass -> 负责加载load…

【数据结构】队列的使用方法

队列&#xff08;Queue&#xff09;是另一种基本的线性数据结构&#xff0c;它允许在一端进行插入操作&#xff0c;而在另一端进行删除操作。队列的特点是先进先出&#xff08;First In First Out, FIFO&#xff09;&#xff0c;即最先进入队列的元素最先被取出。 队列可以用数…

38. UE5 RPG 修改火球术的攻击方向以及按住Shift攻击

在前面&#xff0c;我们实现了火球术火球的制作&#xff0c;能够在释放火球术时&#xff0c;角色将播放释放技能动画&#xff0c;并实现了对火球的目标的服务器同步功能。 我们先回忆一下之前完成的内容。 在前面&#xff0c;我们先做了一个Actor&#xff0c;用于承载发射的火…