Hightec编译器系列之高级调试技巧精华总结
Hightec编译器系列之高级调试技巧精华总结
小T为了便于大家理解,本文的思维导图大纲如下:

之前可能很多小伙伴没有使用过Hightec编译器,大家可以参考小T之前的文章《Hightec编译器系列之白嫖就是爽》可以下载一年试用版本。
小T使用过适配英飞凌芯片的Hightec,ADS,Tasking等各类编译器,单纯就调试而言,Hightec的UDE调试环境毫无疑问绝对是佼佼者,其他两个虽然是英飞凌官方的编译器,但是调试功能方面相比Hightec的UDE调试环境,那还是差的远了,当然小T就仅针对调试环境而言。
小T在使用Highte的内嵌的UDE调试环境中发现了有很多不错的高级调试技巧,之前也是苦于没有人指导都是自己独立摸索,因此为了避免大家少走弯路,特意讲上述非常有用的调试技巧分享给到大家,希望大家多多点赞,分享。
废话不多说,我们直接进入主题:
单核调试切换
如下图所示,通过如下方式便可以切换到任意核进行调试,以TC397为例,TC397芯片存在6个Core,因此可以分别点击任意Core进行调试。

通过上述方式确定Core之后,便可以通过如下S2步骤进入到Symbol中查看文件名或者函数中,从而找到位置便于打断点:

注意事项:每次当我们需要针对特定Core进行调试时,如打断点,必须重新切换到特定的Core之后,然后再重新调用Symbol才能查找到相应文件名或者函数名,否则就会找不到,或者打断点的位置不对。
查看Core Register
有些时候我们需要通过查看特定的寄存器才能够进一步定位问题,比如出现Trap问题时,可以查看D15与A11寄存器来判断Trap发生的初始位置,如下图为查看Core Register的执行步骤:

断点
调试过程中打断点对我们大家都不陌生,断点最为常用的特性主要包含如下三个方面:
-
单核断点:介绍如何在特定的Core上进行断点操作;
-
多核断点:多核断点对于很多人未接触多核系统的小伙伴,似乎有点陌生,下面讲介绍多核断点的应用场景与执行步骤;
-
条件断点:介绍如何进行条件断点的设置,以便我们能够知道某个特定变量如何进行变化;
单核断点
如下图所示为单核断点的具体执行步骤:

条件断点
如下图为为程序打上条件断点的具体执行步骤:
针对“Watch”窗口中的全局变量鼠标右键便可以进入如下图的读写条件断点控制界面。

多核断点
如下图为插入多核断点的方式,多核断点主要在下列多核同步控制过程起作用,将进一步详解讲解。

汇编显示控制
如下图为通过切换下列图标来实现汇编代码与源码的之间的自由切换,这对于想看具体的汇编代码调试非常有帮助。

查看Call Stack
通过如下图方式操作便可以查看当前断点所在的函数栈调用信息,这对于我们了解函数调用过程非常有帮助。

查看全局与局部变量
这个操作可以说对开发软件的小伙伴来说,毫无疑问是最为常用的基本技巧,必须得掌握啊。
查看局部变量
在“Locals”中查看当前断点所在的上文中的所有局部变量,很多小伙伴经常为了观看局部变量经常改成全局变量再去看,其实完全没必要,Hightec的UDE已经为你想到了:

查看全局变量
通过”Watch“窗口来查看全局变量,方便快捷:

多核同步控制
有些时候,我们需要调试在两个或者多核之间的同步问题时,我们就可能会用到多核同步控制功能,该功能能够实现控制Core0(Master core)与其他核的同时启停,这对于我们调试核间同步问题非常有帮助,如下图为多核同步控制的具体设置过程:
S1:进入多核同步控制界面

S2:点击添加控制组,可以添加多组,满足你的任意需求

S3:重命名Group,然后进入下一步即可。

S4:通过左右移动便可以实现右边特定受控的Core Group,需要注意的是Core0作为Master Core必须添加进来。

S5:如下图仅设置Core0与Core1为Core Group,其他核将在启动调试过程中不受控制。

S6:如下图在Core0打上断点之后,仅受控组的Core0与Core1停止,其余核不受影响,正常running。

注意事项:如果未设置run control group,那么各个Core都将独立运行互不影响,除了Core0在启动过程中会启动其他Slave Core之外。
S7: 多核断点控制
多核断点是建立在存在上述Run Control Group基础之上才能够发挥作用,按照上述”断点“的方式打上多核断点之后如果这段代码都会被core0与Core1同时访问,那么仅需要在Core0或者core1相同位置打上多核断点,那么就会同时在Core0与Core1访问的地方打上断点,这样就不要分别到每个核打断点,提高调试效率。
注意:多核断点仅对多核会访问相同的代码段的基础上才能发挥作用,如果代码不是多核共享的,那么多核断点与单核断点没有差别。
实时查看变量技巧
很多时候我们不仅仅需要在停止运行时能够显示相关全局变量的值,也希望能够在实时运行中也能够观测到相关全局变量的变化,此时Hightec的UDE就远胜ADS以及Tasking的IDE调试环境了,ADS与Tasking编译器自带的IDE调换器据我所知当前无法实时查看全局变量。
S1:在"Watch"窗口中的状态栏顶部统一右键点击进入到”Refresh Period“界面设置相关的刷新周期:

S2:在如下图中设置正常运行时刷新的变量周期以及停止Core时的自动刷新周期,这个具体时间可以随君意。

S3:成功设置之后,便可以看到”Watch“下面的所有全局变量都会呈现如下图的蓝色旋转按钮,则代表设置成功,此时让Core running起来便可以实时看到变量的变化。

查看外设寄存器
有些时候我们需要通过查看外设寄存器查看外设相关工作状态是否正常,那么可按照如下方式进行查看:



查看Memory信息
通过”Views-> Memory“便可以查看指定地址中的内存中的值,对于内存中的值存放有个更为直观的理解。

下载配置
在每次启动Hightec调试界面时,启动调试界面按钮如下:

便会自动跳出如下刷写界面,默认情况下该界面无需更改,只不过小T说明了下其功能作用,core0会自动将其他Core的文件一并刷入到其他Core的Flash区域,所以不用担心如下图只是刷写的时Core0。

有些时候软件刷写的代码是在另外一台电脑上编译的,我们需要在不一样的电脑上进行调试,此时可能源代码路径不一致,这个时候就需要修改源代码路径便可以进行Attach进行调试:
通过点击调试界面”Config – Debug Server Configuration – View Server – Source Code –Path Management “进入到如下配置界面

更多精彩内容,敬请关注公众号“ADAS与ECU之吾见”!!!
相关文章:
Hightec编译器系列之高级调试技巧精华总结
Hightec编译器系列之高级调试技巧精华总结 小T为了便于大家理解,本文的思维导图大纲如下: 之前可能很多小伙伴没有使用过Hightec编译器,大家可以参考小T之前的文章《Hightec编译器系列之白嫖就是爽》可以下载一年试用版本。 小T使用过适配英…...
【论文笔记】LoRA LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
题目:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 来源: ICLR 2022 模型名称: LoRA 论文链接: https://arxiv.org/abs/2106.09685 项目链接: https://github.com/microsoft/LoRA 文章目录 摘要引言问题定义现有方法的问题方法将 LORA 应用于 Transformer 实…...
【Sa-Token|4】Sa-Token微服务项目应用
若微服务数量多,如果每个服务都改动,工作量大,则可以只在网关和用户中心进行改动,也是可以实现服务之间的跳转。 这种方式可以通过在网关服务中生成和验证 Sa-Token,并将其与现有的 Token关联存储在 Redis 中。用户中心…...
鸿蒙开发系统基础能力:【@ohos.hilog (日志打印)】
日志打印 hilog日志系统,使应用/服务可以按照指定级别、标识和格式字符串输出日志内容,帮助开发者了解应用/服务的运行状态,更好地调试程序。 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用…...
SpringMVC系列十: 中文乱码处理与JSON处理
文章目录 中文乱码处理自定义中文乱码过滤器Spring提供的过滤器处理中文 处理json和HttpMessageConverter<T>处理JSON-ResponseBody处理JSON-RequestBody处理JSON-注意事项和细节HttpMessageConverter<T\>文件下载-ResponseEntity<T\>作业布置 上一讲, 我们学…...
使用MyBatisPlus进行字段的自动填充
使用MyBatisPlus进行字段的自动填充 需求场景 当我们往数据库里面插入一条数据,或者是更新一条数据时,一般都需要标记创建时间create_time和更新时间update_time的值,但是如果我们每张表的每个请求,在执行sql语句的时候我们都手…...
python爬虫之aiohttp多任务异步爬虫
python爬虫之aiohttp多任务异步爬虫 爬取的flash服务如下: from flask import Flask import timeapp Flask(__name__)app.route(/bobo) def index_bobo():time.sleep(2)return Hello boboapp.route(/jay) def index_jay():time.sleep(2)return Hello jayapp.rout…...
1964springboot VUE小程序在线学习管理系统开发mysql数据库uniapp开发java编程计算机网页源码maven项目
一、源码特点 springboot VUE uniapp 小程序 在线学习管理系统是一套完善的完整信息管理类型系统,结合springboot框架uniapp和VUE完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发),…...
【前端项目笔记】3 用户管理
用户管理相关功能实现 涉及表单、对话框、Ajax数据请求 基本页面 用户列表开发 在router.js中导入Users.vue 解决用户列表小问题 选中(激活)子菜单后刷新不显示高亮 给二级菜单绑定单击事件,点击链接时把对应的地址保存到sessionSto…...
【文献及模型、制图分享】基于SSP-RCP不同情景的京津冀地区土地覆被变化模拟
公众号新功能 目前公众号新增以下等功能 1、处理GIS出图、Python制图、区位图、土地利用现状图、土地利用动态度和重心迁移图等等 2、核密度分析、网络od分析、地形分析、空间分析等等 3、地理加权回归、地理探测器、生态环境质量指数、地理加权回归模型影响因素分析、计算…...
基于单片机的智能台灯控制系统
摘要: 文章设计一款单片机智能台灯控制系统,实现对台灯的手动和自动控制功能,以 STC89C52 单片机作为多功能智能台灯的主控制器,光电检测模块检测坐姿,红外传感器检测人体,光敏电阻检测光强,同…...
PrestaShop的一些使用介绍
目录 PrestaShop 是一个功能丰富的开源电子商务解决方案。 1. 以下是其基本概念和架构的一些要点: 2. PrestaShop 的模块开发是扩展其功能的重要方式。以下是对 PrestaShop 模块开发的详细介绍: 开发环境准备: 3. PrestaShop 的模块开发允…...
零基础女生如何入门人工智能,从哪里下手?学习时间大概要多久?
作为一个理工科早期毕业生,出于近乎本能的敏感,格外关注全网热议的ChatGPT。 本来国内就业环境就不好,各行各业内卷越来越严重,加上人工智能的异军突起,各行各业势必将迎来科技进步跨时代的巨大冲击,在此情…...
简答分享python学习进修网站
一、网战推荐 CodeCombat 是一款网页编程游戏。这款编程游戏借鉴了游戏很多设计元素,游戏剧情十分丰富。Codecombat能够学习Python多种语言,这些语言能够运用到游戏设计、网页应用、app的开发上。 Checkio 是一个基于浏览器的游戏,你需要使…...
linux高级编程(I/O)
fputc int fputc(int c, FILE *stream); 功能: 向流中写入一个字符 参数: c:要写入的字符 stream:文件流指针 返回值: 成功返回写入的字符ASCII码值 失败返回EOF fgetc int fgetc(FILE *stream); 功能: 从流中读取一个字符 参数: stream:文件流…...
Java面试——认证与授权
X、常见面试题汇总 1、Shiro与SpringSecutity对比 1)Shiro的特点: Shiro 是 Apache 下的项目,相对简单、轻巧,更容易上手使用。 Shiro 权限功能基本都能满足,单点登录都可以实现。且不用与任何的框架或者容器绑定, 可…...
【经典算法OJ题讲解】
1.移除元素 经典算法OJ题1: 移除元素 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-element/desc…...
大数据面试题之Zookeeper面试题
目录 1、介绍下Zookeeper是什么? 2、Zookeeper有什么作用?优缺点?有什么应用场景? 3、Zookeeper的选举策略,leader和follower的区别? 4、介绍下Zookeeper选举算法 5、Zookeeper的节点类型有哪些?分别作用是什么? 6、Zookeeper的节点数怎么设置比较好? …...
JVM 内存区域
一、运行时数据区域 Java 虚拟机在执行 Java 程序的过程中,会把它管理的内存划分成若干个不同的数据区域。 JDK 1.8 和之前的版本略有不同,这里介绍 JDK 1.7 和 JDK 1.8 两个版本。 JDK 1.7: 线程私有: 程序计数器虚拟机栈本地…...
全网最强剖析Spring AOP底层原理
相信各位读者对于Spring AOP的理解都是一知半解,只懂使用,却不懂原理。网上关于Spring AOP的讲解层出不穷,但是易于理解,让人真正掌握原理的文章屈指可数。笔者针对这一痛点需求,决定写一篇关于Spring AOP原理的优质博…...
答辩前 3 天,我用 PaperXie 的 AI PPT 功能,把答辩 PPT 从 0 改到了能直接上台
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 凌晨两点的宿舍里,电脑屏幕的蓝光映着你布满红血丝的眼睛。文件夹里躺着写了半个月的毕业论文终稿,旁…...
从Git历史到数据洞察:构建代码仓库统计分析工具的设计与实践
1. 项目概述:一个为开发者量身定制的代码统计工具 在软件开发的日常中,无论是个人复盘、团队汇报,还是项目交接,我们常常会遇到一个看似简单却颇为棘手的问题:如何客观、量化地评估一个代码仓库的“工作量”或“活跃度…...
《B4003 [GESP202406 三级] 移位》
题目背景 对应的选择、判断题:https://ti.luogu.com.cn/problemset/1151 题目描述 小杨学习了加密技术移位,所有大写字母都向后按照⼀个固定数目进行偏移。偏移过程会将字母表视作首尾相接的环,例如,当偏移量是 3 的时候&#…...
如何用WeChatExporter一键备份微信聊天记录:完整图文教程
如何用WeChatExporter一键备份微信聊天记录:完整图文教程 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否担心换手机后珍贵的微信聊天记录会消失&#…...
GPT Image 2刷屏后,AI赚钱的新门槛变了:向量引擎、deepseek v4、api和key怎么串成一个Agent工作流
GPT Image 2刷屏后,AI赚钱的新门槛变了:向量引擎、deepseek v4、api和key怎么串成一个Agent工作流最近 AI 圈有一种很奇妙的割裂感。 一边是大家刷到 GPT Image 2 的实测图,心里直呼:这也太真了吧?电影海报像真的&…...
你以为路径不会回头?一道 Self Crossing 让无数人当场破防
你以为路径不会回头?一道 Self Crossing 让无数人当场破防 很多人第一次刷到 Self Crossing(路径交叉) 这道题时,都有一种错觉: “不就是判断线段相交吗?这能有多难?” 结果一写代码: 判断漏了 边界炸了 图形绕晕了 Case 全挂了 最后看题解的时候,人都沉默了。 因为…...
AI应用开发利器:Prompster提示词管理库的设计与实践
1. 项目概述:一个为AI应用开发者准备的提示词管理利器如果你正在开发基于大语言模型(LLM)的应用,无论是聊天机器人、内容生成工具,还是复杂的AI工作流,那么你一定对“提示词工程”这个词深有体会。从最初的…...
ChatALL:一站式聚合主流AI模型,实现高效横向对比与评估
1. 项目概述:一个能同时“拷问”所有主流AI的聚合神器最近在折腾各种大语言模型,从ChatGPT、Claude到国内的文心一言、通义千问,再到开源的Llama、DeepSeek,每个都有自己的特长和脾气。但每次想对比不同模型对同一个问题的回答&am…...
基于cursor-maker构建可复用AI指令模板,提升开发效率与代码一致性
1. 项目概述:一个为开发者赋能的AI代码生成工具如果你是一名开发者,尤其是经常在VSCode里写代码的朋友,那么对Cursor这款集成了AI能力的编辑器一定不陌生。它最大的魅力在于,你可以用自然语言描述你的需求,AI就能帮你生…...
别再手动检查打印机了!用C#写个Windows服务,自动监控HP/Epson等打印机状态并微信通知
打造智能打印机监控系统:基于C#的Windows服务实战指南 打印机故障总是悄无声息地发生——当你急需打印合同时发现缺纸,演示前五分钟发现墨盒耗尽,或是批量打印时某个设备早已脱机。这些场景对IT运维人员来说再熟悉不过,而传统的人…...
