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之吾见”!!!

04-03
### HighTec 技术概述 HighTec 是一种专注于嵌入式开发的集成开发环境 (IDE),提供了一系列用于构建、调试和优化嵌入式系统的工具。以下是关于 HighTec技术概览: #### 1. 高效的安装与配置流程 HighTec 提供了一个完整的安装过程,涵盖了编译工具链、IDE 和许可证管理等多个方面。具体来说,其安装分为以下几个主要阶段: - **编译工具安装**: 用户可以通过官方提供的安装程序完成编译工具链的部署[^1]。 - **IDE 安装**: HighTec IDE 可以通过标准安装向导轻松设置并运行。 - **License 设置**: 许可证文件对于激活软件功能至关重要。这通常涉及两个步骤:一是修改本机网络适配器的相关属性;二是导入从官方网站获取的有效许可文件。 #### 2. 常见问题及其解决方案 在实际应用过程中可能会遇到一些兼容性或者性能上的挑战。例如,在某些情况下,其他第三方插件(如 UDE 或 ADS)可能干扰到 HighTec 正常工作。此时建议采取如下措施来解决问题: - 卸载冲突的应用程序后再重试整个安装序列; - 如果仍然存在问题,则可以尝试手动指定路径下的特定版本组件进行单独加载而不是依赖默认选项自动处理[^2]。 #### 3. 编译器选择支持多种模式 根据项目需求不同可以选择合适的编译方式。“COMPILER_CHOICE=GNU”表示采用的是基于 GNU 工具集扩展而来的高性能 C/C++ 处理方案之一——即 GNU Hightec Compiler[^3]。这种组合不仅继承了开源社区成熟稳定的优势特性同时也融入了许多专为企业级客户定制的功能增强点从而更好地满足复杂应用场景的要求。 #### 4. 使用命令行加速大型工程项目构建速度 针对含有大量自动生成源码片段的大规模应用程序而言,传统图形界面操作往往显得效率低下因为每次改动哪怕只是局部调整也会触发全局扫描分析进而延长等待周期至数十分钟级别不等。为此推荐利用脚本形式调用外部接口实现自动化流水线作业以此显著缩短迭代反馈间隔时间提升整体研发效能[^4]: ```bash make clean && make all -j8 ``` 上述示例展示了如何通过 Makefile 结合多核并发机制快速完成增量更新后的全面验证测试环节执行动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车小T

感谢打赏,我会继续努力奉献精彩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值