0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Trace辅助工具实现代码分析与实时覆盖率统计

RTThread物联网操作系统 来源:RTThread物联网操作系统 作者:RT-Thread 2021-10-09 15:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 简介

Jlink 想必大家都用过,相信登录过 segger 官方网站,下载最新的 jlink 驱动程序的时候,都会看到这样的图片:

在兴叹它那离谱的价格的同时,也会好奇这个东西比手里的x版货都有哪些优势和提升。

以上图片是 segger 官方对 J-Trace 的定位:

使用基于 segger 领先的 trace 方案 J-Trace PRO 实现对代码的收集、验证、分析功能。利用 Arm Cortex 内核的 trace 功能,在无限时长内,实现对所有指令的跟踪,实现对偶然出现的、难以被复现的 bug 追踪记录。

在完整的 System Clock 内实时流式传输 trace。

使用在线代码分析功能来精细优化代码。

指令级别的代码覆盖率检测,为满足安全性规约约束的需求。

无限制的 trace 追踪,实现隔离和识别潜在的代码缺陷。

完整的 J-Link 调试功能

可以看出它最大的卖点就在 arm trace 的信号流捕捉和分析,实现代码的精确流程跟踪,有了精确的代码跟踪,就可以借助 Ozone 工具提供实时分析代码覆盖率、指令回溯、CPU 资源监控等功能。

这么多优点,配合强大的 Ozone 调试平台,code coverage 实时统计,一键生成报表,boom。仿佛那最后的 bug 就可以用它来反复蹂躏、踩在脚底。..感动人心!直到看到售价:

Price: €1,980 EUR

这个价格可以买一台高配的 MacBook 了,但对比其他支持trace接口的调试器来说,性价比出众,例如 trace32。

2. 物理连接

如图所示 segger 的 19 pin trace 接口(1.27mm 牛角),在 JTAG 基础上增加了 5 条 trace 线(4 条数据线 + 1 条时钟线,双边沿模式(DDR))。

有一点要注意一下,不要把两个接口都接到板子上:

Note: Never connect trace cable and JTAG cable at the same time because this may lead tounstable debug and trace connections.

注意:不要同时使用 trace 连接线和 JTAG 连接线,这将导致 debug 和 trace 的不稳定现象。

参考:《UM08001: J-Link / J-Trace User Guide》

3. 打钱

既然本篇目主要介绍 J-Trace 的入门教程,自然就需要有这么一台设备支持一下了。

三句话,让老板为我花了1W8,终于拿到它:

你要问盒子里有没有跳线帽,这个真没有:

可以看见这个板子使用了 ARM cortex A9 + FPGA 的 Zynq-7010 作为主控,通过 Zynq 专有总线与赛普拉斯 CYUSB3011 USB3.1 控制器连接,CYUSB3011 内部也具备一颗 ARM926 200MHz 的控制核心,用于协调 USB3.1 高速传输协议。

周边还有美满的千兆 phy 收发器,芯成的LPDDR2 128MBytes 533Mhz,用于高速收发和缓冲 trace packet,对于电脑主机来说尽量配备大内存和独立的 USB3.0 接口。

外围就是一些电平转换电路和电源了,都是 TI 的一些常见型号,总的来看 JTAG 和 trace port 的逻辑由 FPGA 硬件逻辑实现,当作 J-Link 可以用 zui 高速调试,下载效果要好很多。

4. 什么是 Trace

在上一节我们简单介绍了 J-Trace ,至于为什么三句话说服了老板,我们还是要以专业视角看 trace 的引入能够解决哪些实际的问题。

J-Trace 的标准包装很“贴心”地赠送了一张 STM32F407 核心板,它用的不是标准 Jtag 接口,而是支持 Trace 的接口,我们可以像官网那样去连接和测试 Trace 功能:

翻看 STM32F407 的 RM(RM0090.pdf) 手册,找到 Debug support 章节,可以看见 芯片内部负责 Debug 的系统框图:

可以看见我们主要关注且日常见到的一些片上调试模块:

SWJ-DP: Serial wire / JTAG debug port

AHP-AP: AHB access port

ITM: Instrumentation trace macrocell

FPB: Flash patch breakpoint

DWT: Data watchpoint trigger

TPUI: Trace port unit interface

ETM: Embedded Trace Macrocell

以及文中提及到,STM32F4xx 系列支持的扩展功能:

Flexible debug pinout assignment

MCU debug box (support for low-power modes, control over peripheral clocks, etc.)

归纳一下就是:

SWJ-DP 这个大家都熟悉,不必介绍,其他的也许使用过,但多数情况下我们不会在意它们的存在。

ITM 可以支持 SWO 输出调试,挖个坑下回填。

很多定位中低端的MCU就直接丢弃掉 Trace Port 相关电路单元了,加上对外接调试设备的高要求(贵)以至于很多工程师并不知道 ARM Cortex 上其实还有 JTAG/SWD 之外的调试端口

本文重心围绕指令追踪,我们重点来看 ETM:

对于ETM,需要了解:

ETM 的主要任务是帮助开发者重建程序执行序列,CPU 上所有指令的执行都可以被 ETM 追踪到。

数据可由 DWT 或者 ITM 单元追踪到。

Embedded Trace Macrocell (ETM) 提供结合了 ARM 的调试和追踪机制,它可以做到在不干扰 CPU 的情况下获取 CPU 的运行状态,一旦捕捉到,便实时通过特定的 Trace 端口向外输出。

具备 ETM 模块的 MCU 可以实现详尽的指令执行历史记录,这些记录可以作为重现代码流程和执行时间的依据,使用分析软件实现代码分析,借此找到难以复现的bug。最难能可贵的是,它可以帮助我们找到失控的代码的根源所在。

此外,ETM还有更多特性有待进一步了解,比如常见的 ETB、Filter & Package Formatter 等细节属性,有待进一步啃手册了。

更多有关 ETM 资料,请翻阅《Embedded Trace Macrocell Architecture Specification》 、《ARM CoreSight Architecture Specification》 、《ARMv7-M Architecture Reference Manual》

综上,ETM 并不是对外输出的最终形式,在 STM32F4xx RM0090.pdf 中有如下结构:

可见 ETM 和 ITM 生成 CPU 运行的追踪信息后,由 TPIU 模块执行封包,并使用对外已经连接的序列器输出,由这张图片可以得出以下结论:

00cd541e-22a0-11ec-82a8-dac502259ad0.png

终于涉及到物理层连接了,自然就会引出物理连接概念:Trace signal timing (追踪信号时序)

上一章节我们知道 ETM 信息是可以和 CPU 同频的,以达到最佳的指令追踪覆盖效果,对于 Cortex-M 架构,ARM 有如下定义:

trace 时钟往往是 1/2 的 CPU 时钟,但是 trace data 线路可以是 DDR (双倍速率-亦称上升下降沿)方式通信,通常 data 线有4条,意味着一个 trace 时钟周期可以输出1个字节的 trace 数据。

trace 硬件接入,笔者经验总结:

如今 MCU 主频也在不断递进,为了保持高速的 trace 也必然对线路阻抗与信号输出能力提出了更苛刻的要求。由于是 DDR 方式地获取追踪数据,所以在 Layout 上就需要做好等长,为了保证良好的 trace 稳定性,也应当从 MCU IO 翻转输出能力和CPU主频两个角度的上限妥协一个较为稳定的时钟速率。

由于是高速 DDR 信号,时序上要尽量满足以下要求:

Trace CLK 作为时钟基准,如上图所示 Trace Data 被时钟上升或下降沿一分为二(50%占空比)是最佳的信号效果,如果 Trace Data 出现了较多的超前或者滞后,也可以在 Ozone 中设置延迟补偿,这里不过多介绍了。

5. 总结

Trace 能够帮助解决面向过程测试中,以不干扰CPU正常运行为前提,揭示程序运行踪迹,解决最麻烦的bug。

Trace 辅助工具可以实现代码分析与实时覆盖率统计,帮助我们以直观运行视角,揭示代码优化方向。

这套工具除了贵没别的不好,Ozone 调试功能强大且好用,它是免费的,只需要有 J-Link 就行。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1928

    浏览量

    88193
  • DDR
    DDR
    +关注

    关注

    11

    文章

    747

    浏览量

    68527

原文标题:J-Trace入门系列1:感动人心的功能与更感动人心的售价

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式软件测试与专业测试工具的必要性深度解析

    。提升测试效率与覆盖率专业工具通过以下方式优化测试过程: ‌静态代码分析‌:通过MISRA-C等规则检查防止缓冲区溢出等隐患 ‌动态符号执行‌:自动探索
    发表于 09-28 17:42

    如何秒级实现接口间“幂等”补偿:一款轻量级仿幂等数据校正处理辅助工具

    导语 本文分析了在网络超时场景下,RPC服务调用数据一致性的问题,对于接口无幂等、接口幂等失效情况下,对异常数据快速处理做了分析思考和尝试,开发了一款轻量级仿幂等数据校正处理辅助工具。该工具
    的头像 发表于 09-15 16:55 605次阅读
    如何秒级<b class='flag-5'>实现</b>接口间“幂等”补偿:一款轻量级仿幂等数据校正处理<b class='flag-5'>辅助工具</b>

    【直播预告】RT-Trace调试工具V1.1.0版本功能全解析 | 问学直播

    RT-Thread一直致力于为开发者提供更高效的工具和技术支持。RT-Trace调试工具自面世以来持续演进,功能不断丰富:2025年5月:RT-Trace首次亮相,开创性地
    的头像 发表于 09-05 11:53 950次阅读
    【直播预告】RT-<b class='flag-5'>Trace</b>调试<b class='flag-5'>工具</b>V1.1.0版本功能全解析 | 问学直播

    如何测试协议分析仪的实时响应效率?

    、PCIe 3.0)。 逐步增加数据速率,观察分析仪的丢包(通过内置统计功能或外部流量监控工具)。 记录无丢包时的最大速率(如9.8Gbps)和丢包阈值(如10.1Gbps时丢包
    发表于 07-24 14:19

    太阳光模拟器关键参数 | 光谱匹配度、光谱覆盖率及光谱偏离

    太阳光模拟器作为模拟太阳辐射环境的核心设备,其性能直接关系到诸多领域实验数据的可靠性。光谱匹配度(SMD)、光谱覆盖率(SPC)和光谱偏离(SPD)作为评估其性能的关键指标,从不同维度决定了模拟
    的头像 发表于 07-24 11:26 853次阅读
    太阳光模拟器关键参数 | 光谱匹配度、光谱<b class='flag-5'>覆盖率</b>及光谱偏离<b class='flag-5'>率</b>

    太阳光模拟器性能的影响参数:光谱匹配度、光谱覆盖率及光谱偏离

    的性能评估从单一的光谱匹配度,拓展至光谱匹配度、光谱覆盖率与光谱偏离的多维协同优化。因此,在选择太阳光模拟器时,不能单一关注某一指标,而应结合测试对象的光谱响应特性,实现三者的平衡。 光谱匹配度
    发表于 07-21 15:35

    HarmonyOS AI辅助编程工具(CodeGenie)代码测试

    本功能从DevEco Studio 5.1.0 Release版本开始支持。 根据选中的ArkTS方法名称,CodeGenie支持自动生成对应单元测试用例,提升测试覆盖率。 在ArkTS文档中,光标
    发表于 07-14 17:33

    RT-Trace初体验一之使用Trace功能调试Cortex-M4 | 技术集结

    随着嵌入式系统规模和复杂度不断提升,传统的调试手段已难以满足对系统运行状态的精细化分析需求。为提升开发效率、优化系统性能,RT-Thread推出了一款全新调试工具——RT-Trace。该工具
    的头像 发表于 07-06 10:03 1142次阅读
    RT-<b class='flag-5'>Trace</b>初体验一之使用<b class='flag-5'>Trace</b>功能调试Cortex-M4 | 技术集结

    RT-Trace调试工具正式发布!

    嵌入式开发者打造的高性能调试工具。RT-Trace支持SWD/JTAG高速连接,搭载板载显示屏离线交互系统与WebUI实时监控平台,助力代码调试、性能
    的头像 发表于 06-18 12:02 1202次阅读
    RT-<b class='flag-5'>Trace</b>调试<b class='flag-5'>工具</b>正式发布!

    Lauterbach TRACE32开发工具现在支持PX5 RTOS

    资源实现更快、更轻松的开发。TRACE32 PowerView软件不仅提供PX5操作系统对象当前状态的静态显示,还提供操作系统对象随着时间的推移的动态行为,(例如,操作系统任务调度分析以及许多复杂的
    的头像 发表于 06-12 16:38 824次阅读

    重磅预售!RT-Trace调试工具

    嵌入式开发者注意!调试神器RT-Trace即将登陆淘宝!嵌入式开发从业者们:您是否常被调试效率低下、线程分析不清、故障定位困难所困扰?别愁!专为嵌入式开发者打造的高性能调试工具RT-Trace
    的头像 发表于 05-20 18:15 983次阅读
    重磅预售!RT-<b class='flag-5'>Trace</b>调试<b class='flag-5'>工具</b>

    Segger RTT调试工具的使用方法

    上一期已经跟着小编介绍的安装步骤,相信大家都已经开始使用了Segger Ozone调试工具。那么今天小编继续趁热打铁,给大家介绍另一个Segger推出的调试辅助工具Segger RTT。
    的头像 发表于 03-28 14:21 2682次阅读
    Segger RTT调试<b class='flag-5'>工具</b>的使用方法

    求助,关于iMX DDR3寄存器编程辅助问题求解

    我们目前正在使用 iMX6UL DDR 寄存器编程辅助工具为 U-Boot 生成 DCD 表。我们的设备使用的是 MT41K128M16JT-107,即 DDR3-1866,这意味着它的时钟周期频率
    发表于 03-27 07:16

    基于SEGGER的Ozone调试器和J-Trace工具跟踪Ferrocene的Rust应用

    2025年3月,SEGGER和Ferrous Systems合作,确保使用Ferrous Systems的Ferrocene工具链编译的Rust应用程序可以通过SEGGER的J-Trace工具
    的头像 发表于 03-14 11:27 1264次阅读

    TSP工具包软件的应用说明

    。Keithley TSP Toolkit程控开发辅助工具,是一种新的脚本开发环境,采用Keithley的TSP 指令并利用设备端可内置脚本能力,使得程控软件开发变得比以往更加简单和高效。
    的头像 发表于 01-03 15:53 3286次阅读
    TSP<b class='flag-5'>工具</b>包软件的应用说明