【ARM Trace32(劳特巴赫) 使用介绍 14 -- Go.direct 介绍】


请阅读【Trace32 ARM 专栏导读】


文章目录

    • Trace32 Go.direct
      • Go配合程序断点使用
      • Go 配合读写断点使用
      • Go 快速回到上一层函数
    • System.Mode Go

Trace32 Go.direct

TRACE32调试过程中,会经常对芯片/内核进行控制,比如全速运行、暂停、单步等等。这篇文章先介绍全速运行Go.direct
在这里插入图片描述
Go命令一般用于控制芯片/内核的全速、实时运行,命令不区分大小写,也可以缩写成一个字母g

这边文章以测试函数t32_test 为例进行介绍,其反 C 代码如下:

struct t32_str {
        uint32_t        t32_val;
        uint32_t        t32_id;
        char*           t32_name;
};

static volatile struct t32_str str_t32;
static uint32_t volatile g_t32;

void t32_test(void)
{
        uint32_t t32_tmp;

        hal_printf("%s\n", __func__);

        t32_tmp = 0xdeadbeef;

        g_t32 = 0xdeadbeef;

        str_t32.t32_val = 0x5a5a5a5a;
        str_t32.t32_id = 0xacce55;
        str_t32.t32_name = "trace32";

        hal_printf("t32_tmp:0x%x, g_t32:0x%x, val:0x%x, id:0x%x, name:%s\n",
                   t32_tmp, g_t32, str_t32.t32_val, str_t32.t32_id, str_t32.t32_name);
}

汇编代码如下:

38110 2001823c <t32_test>:
38111 2001823c:       b510            push    {r4, lr}
38112 2001823e:       b082            sub     sp, #8
38113 20018240:       490c            ldr     r1, [pc, #48]   ; (20018274 <t32_test+0x38>)
38114 20018242:       480d            ldr     r0, [pc, #52]   ; (20018278 <t32_test+0x3c>)
38115 20018244:       f7fa fa06       bl      20012654 <hal_printf>
38116 20018248:       480c            ldr     r0, [pc, #48]   ; (2001827c <t32_test+0x40>)
38117 2001824a:       490d            ldr     r1, [pc, #52]   ; (20018280 <t32_test+0x44>)
38118 2001824c:       6001            str     r1, [r0, #0]
38119 2001824e:       f04f 335a       mov.w   r3, #1515870810 ; 0x5a5a5a5a
38120 20018252:       6043            str     r3, [r0, #4]
38121 20018254:       4b0b            ldr     r3, [pc, #44]   ; (20018284 <t32_test+0x48>)
38122 20018256:       6083            str     r3, [r0, #8]
38123 20018258:       4b0b            ldr     r3, [pc, #44]   ; (20018288 <t32_test+0x4c>)
38124 2001825a:       60c3            str     r3, [r0, #12]
38125 2001825c:       6802            ldr     r2, [r0, #0]
38126 2001825e:       6843            ldr     r3, [r0, #4]
38127 20018260:       6884            ldr     r4, [r0, #8]
38128 20018262:       68c0            ldr     r0, [r0, #12]
38129 20018264:       9001            str     r0, [sp, #4]
38130 20018266:       9400            str     r4, [sp, #0]
38131 20018268:       4808            ldr     r0, [pc, #32]   ; (2001828c <t32_test+0x50>)
38132 2001826a:       f7fa f9f3       bl      20012654 <hal_printf>
38133 2001826e:       b002            add     sp, #8
38134 20018270:       bd10            pop     {r4, pc}
38135 20018272:       bf00            nop
38136 20018274:       2001e478        .word   0x2001e478
38137 20018278:       2001a5e8        .word   0x2001a5e8
38138 2001827c:       20021038        .word   0x20021038
38139 20018280:       deadbeef        .word   0xdeadbeef
38140 20018284:       00acce55        .word   0x00acce55
38141 20018288:       2001c8d8        .word   0x2001c8d8
38142 2001828c:       2001c8e0        .word   0x2001c8e0

Go配合程序断点使用

正常我们设置好断点后,都需要点击Go,来使CPU内核跑起来并达到断点处:

Break.set t32_test
Go

在这里插入图片描述

我们也可以把上面两个命令结合起来:

Go t32_test

这样我们可以把程序一直运行到t32_test函数的入口处。

当然,写地址效果是一样的:

Go 0x2001823C

Go 配合读写断点使用

命令 Var.go g_t32 /Write 便可以把程序运行到 g_t32 变量被改写的位置。
在这里插入图片描述

Go 快速回到上一层函数

有时,当程序正好停在某一个函数内,例如下图的 t32_test,我希望快速地执行完当前函数的所有代码,并返回到上一层调用者的位置:
在这里插入图片描述

我们可以使用命令 Go.up , 执行完后,可以看到 PC 指针已经跳出 t32_test
在这里插入图片描述

System.Mode Go

上面介绍的Go命令,不等同于 System.Mode Go ,也就是说不等同于如下窗口的Go按钮
在这里插入图片描述

此处Go按钮的完整作用是:

  • Step1:复位芯片(如果接有复位信号)
  • Step2:TRACE32尝试连上芯片内核并建立调试通信
  • Step3: 控制芯片内核全速运行

推荐阅读
https://blog.csdn.net/weixin_48120109/article/details/126167861

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7.x操作系统的ECS云服务器上搭建WordPress网站

WordPress是使用PHP语言开发的博客平台&#xff0c;在支持PHP和MySQL数据库的服务器上&#xff0c;您可以用WordPress架设自己的网站&#xff0c;也可以用作内容管理系统&#xff08;CMS&#xff09;。本教程介绍如何在CentOS 7.x操作系统的ECS实例上搭建WordPress网站。 背景…

服务器漏洞防护措施有哪些?

随着互联网的普及和发展&#xff0c;服务器在各个领域的应用越来越广泛&#xff0c;同时也面临着越来越多的安全威胁。服务器漏洞一旦被攻击者利用&#xff0c;不仅可能导致数据泄露、系统崩溃等严重后果&#xff0c;还可能影响到企业的正常运营和声誉。因此&#xff0c;加强服…

山海鲸可视化软件:选择合适的图表,让数据可视化更高效

作为一名山海鲸可视化软件的开发者&#xff0c;我深知选择合适的图表对于数据可视化的重要性。下面我将从开发者的角度&#xff0c;分享一些关于如何选择合适可视图表的建议。 首先&#xff0c;我们需要明确数据可视化的目标。不同的图表类型具有不同的特点和适用场景&#xff…

中海达亮相能源北斗与时空智能创新技术应用大会

12月7日-8日&#xff0c;2023年能源北斗与时空智能创新技术应用大会暨鹭岛论坛在厦门举办。本次活动以“能源北斗时空智能”为主题&#xff0c;由中关村智能电力产业技术联盟、中国能源研究会、中国卫星导航定位协会、中国电力科学研究院有限公司、国网信息通信产业集团有限公司…

docker使用详解

介绍 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。 Docker基于轻量级虚拟化技术&#xff0c;整个项目基于Go语言开…

datax-自定义json遇到数据库字段名为关键字

一、背景 源数据库&#xff1a;pg 目标数据库&#xff1a;hive 问题&#xff1a; 自定义json时因pg表字段中包含desc的字段所以报错 二、定位问题 很明显&#xff0c;desc是关键字&#xff0c;所以报错 三、解决方案 将自定义json中的双引号调整成单引号&#xff0c;关键…

通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair

本文通过示例介绍了 RIOT 如何轻松地将数据从 AWS ElastiCache 迁移到云原生内存数据库&#xff08;如 Tair 和云数据库 Redis 版&#xff09;。 1. 准备资源迁移 1.1. 源代码 AWS ElastiCache cache.r6g.xlarge。它有三个数据分片&#xff0c;与 Redis 6.2 兼容。 AWS EC2 t2.…

vue中预览pdf的方法

使用vue-pdf 备注&#xff1a;这里只介绍了一页的pdf <div class"animation-box-pdf"><pdf :src"http://xxxx" /> </div>import Pdf from vue-pdf // src可以是文件地址url&#xff0c;也可以是文件流blob&#xff08;将blob转成url&a…

Python机器学习19——常用六种机器学习的异常值监测方法(孤立森林,数据支持描述,自编码器,高斯混合,DBSCAN,LOF)

案例背景 异常值监测是机器学习的一个重要领域&#xff0c;博主以前做预测多&#xff0c;异常值监测涉及得少&#xff0c;但之后的工作可能需要做异常值方面的工作&#xff0c;所以大致总结了一下常用的机器学习来做异常值监测的方法以及代码。 标题的这些机器学习方法基本都…

Java项目学生管理系统六后端补充

班级管理 1 班级列表&#xff1a;后端 编写JavaBean【已有】编写Mapper【已有】编写Service编写controller 编写Service 接口 package com.czxy.service;import com.czxy.domain.Classes;import java.util.List;/*** author 桐叔* email liangtongitcast.cn* description*/ p…

计算机基础

【一】深度学习中常用的Linux命令汇总 1.man&#xff1a;man command&#xff0c;可以查看某个命令的帮助文档&#xff0c;按q退出帮助文档 2.cd&#xff1a;用于切换目录&#xff0c;cd - 可以在最近两次目录之间来回切换 3.touch&#xff1a;touch file创建文件。 4.ls&…

Windows、Linux 和 macOS 操作系统:操作系统大比较

目录 引言 Windows Linux macOS 1. 用户界面 1.1 Windows 1.2 Linux 1.3 macOS 2. 开发者支持 2.1 Windows 2.2 Linux 2.3 macOS 3. 安全性和稳定性 3.1 Windows 3.2 Linux 3.3 macOS 结论 引言 在计算机科学领域&#xff0c;操作系统是计算机系统中的核心软件…

【计算机视觉】SIFT

在边缘提取的时候&#xff0c;用高斯一阶导对信号进行卷积&#xff0c;响应值最大的就是边界如果用高斯二阶导对信号进行卷积&#xff0c;0点就是边界点&#xff08;二阶导等于0的点&#xff0c;对应一阶导的极值点&#xff09; 如果用高斯二阶导在不同的信号上进行卷积&#x…

华为数通---配置基本QinQ示例

QinQ简介 定义 QinQ&#xff08;802.1Q-in-802.1Q&#xff09;技术是一项扩展VLAN空间的技术&#xff0c;通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能&#xff0c;可以使私网VLAN透传公网。由于在骨干网中传递的报文有两层802.1Q Tag&#x…

【JavaWeb学习笔记】7 - Servlet入门开发

零、在线文档 Servlet 3.1 API Documentation - Apache Tomcat 8.0.53 一、Servlet基本介绍 1.为什么出现Servlet 提出需求:请用你现有的html css javascript&#xff0c;开发网站&#xff0c;比如可以让用户留言/购物/支付,你能搞定吗? 不能 这几个不能直接操作数据库 …

Android gradle配置jar包加载顺序及延伸知识

Android gradle配置jar包加载顺序及延伸知识 前言一、直接配置1.APP目录下的build.gradle2.项目级的build.gradle3.其他问题 二、gradle的生命周期及关键方法1.关键方法2.gradle的生命周期 总结 前言 项目涉及到了要加载framework.jar&#xff0c;需要将libs文件夹下的framewo…

SpringBoot对PDF进行模板内容填充、电子签名合并

1. 依赖引入–这里只包含额外引入的包 原有项目包不含括在内 <!-- pdf编辑相关--> <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version> </dependency><de…

数据结构与算法:选择排序

原理 从当前位置到最后&#xff0c;找出最小(或者最大)值&#xff0c;放在当前位置&#xff0c;位置后移。然后重复此过程。 每次都要在剩余未排序的集合中&#xff0c;找到那个最小(或者最大)的值&#xff0c;放到当前位置。所以叫选择排序。 最小或者最大&#xff0c;影响…

iOS加密CoreML模型

生成模型加密密钥 必须在Xcode的Preferences的Accounts页面登录Apple ID&#xff0c;才能在Xcode中生成模型加密密钥。 在Xcode中打开模型&#xff0c;单击Utilities选项卡&#xff0c;然后单击“Create Encryption Key”按钮。 从下拉菜单中选择当前App的Personal Team&…

Hive命令操作

1.命令行模式 1. 获取帮助 --> hive -H 或-help 2. 运行hive语句 --> hive -e "执行语句" 3. 运行hive文件 --> hive –f "执行文件" 4. 定义变量 --> hive –hivevar keyvalue 5. 引用变量 --> ${varname} 2. 交互模式 1. 进入客户端 -…