Hightec编译器系列之高级调试技巧精华总结

Hightec编译器系列之高级调试技巧精华总结

小T为了便于大家理解,本文的思维导图大纲如下:

image-20240622192207675

之前可能很多小伙伴没有使用过Hightec编译器,大家可以参考小T之前的文章《Hightec编译器系列之白嫖就是爽》可以下载一年试用版本。

小T使用过适配英飞凌芯片的Hightec,ADS,Tasking等各类编译器,单纯就调试而言,Hightec的UDE调试环境毫无疑问绝对是佼佼者,其他两个虽然是英飞凌官方的编译器,但是调试功能方面相比Hightec的UDE调试环境,那还是差的远了,当然小T就仅针对调试环境而言。

小T在使用Highte的内嵌的UDE调试环境中发现了有很多不错的高级调试技巧,之前也是苦于没有人指导都是自己独立摸索,因此为了避免大家少走弯路,特意讲上述非常有用的调试技巧分享给到大家,希望大家多多点赞,分享。

废话不多说,我们直接进入主题:

单核调试切换

如下图所示,通过如下方式便可以切换到任意核进行调试,以TC397为例,TC397芯片存在6个Core,因此可以分别点击任意Core进行调试。

image-20240622201031749

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

image-20240622201054867

注意事项:每次当我们需要针对特定Core进行调试时,如打断点,必须重新切换到特定的Core之后,然后再重新调用Symbol才能查找到相应文件名或者函数名,否则就会找不到,或者打断点的位置不对。

查看Core Register

有些时候我们需要通过查看特定的寄存器才能够进一步定位问题,比如出现Trap问题时,可以查看D15与A11寄存器来判断Trap发生的初始位置,如下图为查看Core Register的执行步骤:

image-20240622201612610

断点

调试过程中打断点对我们大家都不陌生,断点最为常用的特性主要包含如下三个方面:

  • 单核断点:介绍如何在特定的Core上进行断点操作;

  • 多核断点:多核断点对于很多人未接触多核系统的小伙伴,似乎有点陌生,下面讲介绍多核断点的应用场景与执行步骤;

  • 条件断点:介绍如何进行条件断点的设置,以便我们能够知道某个特定变量如何进行变化;

单核断点

如下图所示为单核断点的具体执行步骤:

image-20240622202303545

条件断点

如下图为为程序打上条件断点的具体执行步骤:

针对“Watch”窗口中的全局变量鼠标右键便可以进入如下图的读写条件断点控制界面。

image-20240622202452712

多核断点

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

image-20240622215334995

汇编显示控制

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

image-20240622202621691

查看Call Stack

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

image-20240622202812125

查看全局与局部变量

这个操作可以说对开发软件的小伙伴来说,毫无疑问是最为常用的基本技巧,必须得掌握啊。

查看局部变量

在“Locals”中查看当前断点所在的上文中的所有局部变量,很多小伙伴经常为了观看局部变量经常改成全局变量再去看,其实完全没必要,Hightec的UDE已经为你想到了:

image-20240622203114575

查看全局变量

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

image-20240622203129053

多核同步控制

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

S1:进入多核同步控制界面

image-20240622203717712

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

image-20240622203738439

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

image-20240622203755681

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

image-20240622203810495

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

image-20240622203826171

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

image-20240622203845146

注意事项:如果未设置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“界面设置相关的刷新周期:

image-20240622204353113

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

image-20240622204406624

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

image-20240622204417952

查看外设寄存器

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

image-20240622205557987

image-20240622205617450

image-20240622205636245

查看Memory信息

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

image-20240622205803054

下载配置

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

image-20240622212635780

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

image-20240622212513833

有些时候软件刷写的代码是在另外一台电脑上编译的,我们需要在不一样的电脑上进行调试,此时可能源代码路径不一致,这个时候就需要修改源代码路径便可以进行Attach进行调试:

通过点击调试界面”Config – Debug Server Configuration – View Server – Source CodePath Management “进入到如下配置界面

image-20240622213234017

更多精彩内容,敬请关注公众号“ADAS与ECU之吾见”!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33460.shtml

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

相关文章

Qt Signals and Slots:多次连接的影响与处理

在Qt中,信号(signals)与槽(slots)是实现对象之间通信的核心机制。本文探讨了一个技术问题:若同一个信号和槽被连接了两次会发生什么?以及Qt如何处理这种情况。 问与答 Q: 如果同一个信号和槽被…

Python技术进阶:从基础到数据分析实战

Python技术进阶:从基础到数据分析实战 作为一名四十多岁的中年技术员,我见证了编程语言的兴衰更迭,而Python无疑是近年来最耀眼的明星之一。它以其简洁的语法、丰富的库和框架、以及强大的社区支持,赢得了无数开发者的青睐。今天…

C++ STL Iterators

STL中的迭代器是指针的泛化,它表示容器中的位置,迭代器是STL容器和STL算法之间的的粘合剂,它给容器提供了强大的迭代和随机访问功能。迭代器通常支持以下操作: (1) * 返回当前位置的元素 (2) ==, != 比较两个位置 (3) = 给迭代器赋一个新值 迭代器通常分为以…

GEOSERVER 添加 Shapefile

添加 Shapefile 是任何 GIS 工具的核心。本节介绍使用 GeoServer 添加和发布 Shapefile 的任务。 导航到 workshop 目录(在 Windows 上)并找到以下 shapefile:$TRAINING_ROOT/data/user_data/%TRAINING_ROOT%\data\user_data 主要道路. shp 主…

2024.6.24 刷题总结

2024.6.24 **每日一题** 503.下一个更大元素 Ⅱ,刚开始思考时,会想到坐标变换,进而想到每个数字追多遍历数组的两倍长度,即我们可以把数组整体往后复制一遍,遍历查询即可,但是时间复杂度太高,考…

pyhon模块以及常用的第三方模块

import my_info as info print(info.name) info.show()from my_info import * print(name) show() pyhon中包的导入 import admin.my_admin as ad # 包名.模块名 admin是包名,my_admin是模块名print(ad.name) print(ad.info())from admin import my_admin as ad # …

点云处理实操 1. 求解点云法向

目录 一、点云法向的定义 二、如何计算计算法向量 三、实操 四、代码 main.cpp CMakeList.txt 一、点云法向的定义 点云法向量是指点云中某个点的局部表面法向量(Normal Vector)。法向量在三维空间中用来描述表面在该点处的方向属性,它是表面几何特征的重要描述工具。…

第二证券股市资讯:“掘金”东南亚 券商出海正当时

东南亚正在成为中资券商出海的“新站点”。 随着中资企业“走出去”的步伐愈加坚决,为其供给金融服务的中资券商也越来越重视世界事务布局。与上一波集体“落子”香港不同,此次中资券商纷纷将目光投向东南亚。在中资企业产业链迁至东南亚的趋势带动下&a…

Go 语言学习笔记之字典 Map

Go 语言中的字典 Map 大家好,我是码农先森。 概念 在 Go 语言中,字典被称为 map,它是一种无序的集合,用于存储键值对。每个键在 map 中必须是唯一的,并且对应一个值。map 是一种非常常用的数据结构,用于…

File文件转Blob文件,临时路径浏览器可查看

fileToBlob (file) { var reader new FileReader(); reader.readAsArrayBuffer(file); reader.onload function (event) { let blob new Blob([event.target.result], { type: file.type }); //{ type: file.type } 预览blob发现乱码可能是type不对 要获取file文件的type …

Python统计实战:3D散点图绘制

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。 (以下练习题来源于《统计学—基于Python》。联系获取完整数据和Python源代码文件。) 练习题 用以下数…

17.RedHat认证-Ansible自动化运维(下)

17.RedHat认证-Ansible自动化运维(下) 这个章节讲ansible的变量,包括变量的定义、变量的规则、变量范围、变量优先级、变量练习等。 以及对于tasks的控制,主要有loop循环作业、条件判断等 变量 介绍 Ansible支持变量功能,能将value存储到…

MOE学习笔记

MOE网络结构 和传统的 transformer 网络结构相比,我们将 Transformer 模型的每个 FFN 层替换为 MoE 层,MoE 层由门网络(Router)和一定数量的专家(Expert)组成。 这些 Expert 其实也是 FFN 层,…

刷代码随想录有感(116):动态规划——单词拆分

题干&#xff1a; 代码&#xff1a; class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string>set(wordDict.begin(), wordDict.end());vector<bool>dp(s.size() 1, false);dp[0] true;for(int j 0; j &…

SAPUI5基础知识9 - JSON Module与数据绑定

1. 背景 在前面的博客中&#xff0c;我们已经学习了SAPUI5中视图和控制器的使用&#xff0c;在本篇博客中&#xff0c;让我们学习下MVC架构中的M-模型了。 SAPUI5中的JSON Model是一个客户端模型&#xff0c;可以用于在SAPUI5应用程序中处理和操作JSON数据。SAPUI5提供了绑定…

【服务器05】之【登录/注册账号成功转至游戏场景】

Unity登录注册数据库 打开【服务器01】的文章项目 导入新UI系统 点击2D 双击输入栏位置 修改输入框尺寸及位置 放大字体 修改默认输入文字 发现中文字变成了口口口口 原因是新UI系统不支持中文&#xff0c;解决这个问题需要更换字体 并且修改输入时字体大小 我们取电脑中找Fon…

2k240hz显示器推荐 - 精选10款 - 高能评测

今天给大家精选了10款2k240hz显示屏&#xff0c;欢迎大家了解。 1.HKC G25H4 - 2k240hz显示器推荐 售价&#xff1a;1999 &#x1f440; 今天我要跟大家分享一款让我彻底被种草的显示器——HKC G25H4&#xff01;&#x1f389; 如果你跟我一样&#xff0c;对游戏和视觉体验有…

存储无界限:MK米客方德SD NAND系列,小容量到大容量的全方位覆盖

在这个数字化飞速前进的时代&#xff0c;数据存储的需求日益增长&#xff0c;不同的应用场景对存储容量的要求也各不相同。MK米客方德公司以其SD NAND系列产品&#xff0c;凭借其广泛的容量覆盖&#xff0c;从1Gb到512Gb&#xff0c;为各种应用场景提供了完美的存储解决方案。今…

代码随想录算法训练营第四十一天| 416. 分割等和子集

416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i0;i<nums.length;i){sum nums[i];}if(sum%2!0){return false;}int weight sum /2;// int[][] dp new int[nums.length][weig…

java线程间的通信 - join 和 ThreadLocal

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…