当前位置: 首页 > news >正文

【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

相关文章:

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

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 Go.directGo配合程序断点使用Go 配合读写断点使用Go 快速回到上一层函数 System.Mode Go Trace32 Go.direct TRACE32调试过程中&#xff0c;会经常对芯片/内核进行控制&#xff0c;比如全速运行、暂停、单步等等。这篇文章先…...

第二十章 : Spring Boot 集成RabbitMQ(四)

第二十章 : Spring Boot 集成RabbitMQ(四) 前言 本章知识点:死信队列的定义、场景、作用以及原理、TTL方法的使用以及演示代码示例。 Springboot 版本 2.3.2.RELEASE ,RabbitMQ 3.9.11,Erlang 24.2死信队列 定义:什么是死信队列? 在RabbitMQ中,并没有提供真正意义…...

防止反编译,保护你的SpringBoot项目

ClassFinal-maven-plugin插件是一个用于加密Java字节码的工具&#xff0c;它能够保护你的Spring Boot项目中的源代码和配置文件不被非法获取或篡改。下面是如何使用这个插件来加密test.jar包的详细步骤&#xff1a; 安装并设置Maven&#xff1a; 首先确保你已经在你的开发环境中…...

OpenCV开发:MacOS源码编译opencv,生成支持java、python、c++各版本依赖库

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它为开发者提供了丰富的工具和函数&#xff0c;用于处理图像和视频数据&#xff0c;以及执行各种计算机视觉任务。 以下是 OpenCV 的一些主要特点和功能&#xff…...

【数据库设计和SQL基础语法】--查询数据--分组查询

一、分组查询概述 1.1 什么是分组查询 分组查询是一种 SQL 查询技术&#xff0c;通过使用 GROUP BY 子句&#xff0c;将具有相同值的数据行分组在一起&#xff0c;然后对每个组应用聚合函数&#xff08;如 COUNT、SUM、AVG等&#xff09;。这允许在数据集中执行汇总和统计操作…...

使用对象处理流ObjectOutputStream读写文件

注意事项: 1.创建的对象必须实现序列化接口,如果属性也是类&#xff0c;那么对应的类也要序列化 2.读写文件路径问题 3.演示一个例子 &#xff08;1&#xff09;操作的实体类FileModel&#xff0c;实体类中有Map,HashMap这些自带的本身就实现了序列化。 public class File…...

【高级网络程序设计】Block1总结

这一个Block分为四个部分&#xff0c;第一部分是Introduction to Threads and Concurrency &#xff0c;第二部分是Interruptting and Terminating a Thread&#xff0c;第三部分是Keep Threads safety&#xff1a;the volatile variable and locks&#xff0c;第四部分是Beyon…...

linux下查看进程资源ulimit

ulimit介绍与使用 ulimit命令用于查看和修改进程的资源限制。下面是ulimit命令的使用方法&#xff1a; 查看当前资源限制&#xff1a; ulimit -a 这将显示当前进程的所有资源限制&#xff0c;包括软限制和硬限制。查看或设置单个资源限制&#xff1a; ulimit -<option> …...

C++ I/O操作---输入输出

本文主要介绍C I/O操作中的输入输出流。 目录 1 输入输出 2 输入输出流分类 3 C中的输入输出流 4 iostream 5 std::ofstream 6 std::fstream 7 std::getline 1 输入输出 C的输入输出是数据在不同设备之间的传输&#xff0c;即在硬盘、内存和外设之间的传输。 数据如水流…...

会 C# 应该怎么学习 C++?

会 C# 应该怎么学习 C&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&a…...

CentOS 7 部署frp穿透内网

本文将介绍如何在CentOS 7.9上部署frp&#xff0c;并通过示例展示如何配置和测试内网穿透。 文章目录 &#xff08;1&#xff09;引言&#xff08;2&#xff09;准备工作&#xff08;4&#xff09;frps服务器端配置&#xff08;5&#xff09;frpc客户端配置&#xff08;6&#…...

高效网络爬虫:代理IP的应用与实践

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f91f; 代理 IP 推荐&#xff1a;&#x1f449;品易 HTTP 代理 IP &#x1f485; 想寻找共同学习交流的小伙伴&#xff0c…...

java设计模式-工厂方法模式

1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口&#xff0c;将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 2.工厂方法模式的主要优缺点 优点&#xff1a; 用户只需要知道具体工厂的名称…...

Python实验项目9 :网络爬虫与自动化

实验 1&#xff1a;爬取网页中的数据。 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 # 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 import urllib.r…...

实验三:指令调度和延迟分支

一、实验目的 加深对指令调度技术的理解。加深对延迟分支技术的理解。熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。进一步理解指令调度技术对CPU性能的改进。进一步理解延迟分支技术对CPU性能的改进。 二、实验内容和步骤 首先要掌握MIPSsim模拟器的使用方法。见…...

【Oracle】PL/SQL语法、存储过程,触发器

一、Oracle数据类型 Orcle数据类型说明类比MySQL数据类型字符型CHAR固定长度的字符类型CHAR字符型VARCHAR2可变长度的字符类型VARCHAR字符型LONG大文本类型&#xff0c;最大2G数值型NUMBER数值类型&#xff0c;整数小数都可以&#xff0c;number(5)表示长度5的整数&#xff0c…...

2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 C题 亚马逊野火 原题再现&#xff1a; 野火是指发生在乡村或荒野地区的可燃植被中的任何不受控制的火灾。这样的环境过程对人类生活有着重大的影响。因此&#xff0c;对这一现象进行建模&#xff0c;特别是对其空间发生和扩展进行建模&…...

保姆级 Keras 实现 YOLO v3 三

保姆级 Keras 实现 YOLO v3 三 一. 分配 anchor box二. 正负样本匹配规则三. 为每一个 anchor box 打标签3.1 anchor box 长什么样?3.2 每一个 anchor box 标签需要填充的信息有哪些?3.3 ( Δ x , Δ y , Δ w , Δ h ) (\Delta x, \Delta y, \Delta w, \Delta h) (Δx,Δy,…...

HPM6750系列--第十篇 时钟系统

一、目的 上一篇中《HPM6750系列--第九篇 GPIO详解&#xff08;基本操作&#xff09;》我们讲解了HPM6750 GPIO相关内容&#xff0c;再进一步讲解其他外设功能之前&#xff0c;我们有必要先讲解一下时钟系统。 时钟可以说是微控制器系统中的心脏&#xff0c;外设必须依赖时钟才…...

【简单总结】中断类型号 中断向量 中断入口地址

通过中断类型号可以计算出中断向量的地址。 然后根据该地址可以在中断向量表中取出中断服务程序的入口地址&#xff08;中断向量&#xff09;。 而中断向量就是中断服务程序入口地址。 做个不严谨的图&#xff1a; 1&#xff1a;通过中断类型号找到中断向量 2&#xff1a;通…...

如何使用Tutorial-Codebase-Knowledge实现Docker Swarm集群部署的终极指南

如何使用Tutorial-Codebase-Knowledge实现Docker Swarm集群部署的终极指南 【免费下载链接】Tutorial-Codebase-Knowledge Pocket Flow: Codebase to Tutorial 项目地址: https://gitcode.com/gh_mirrors/tu/Tutorial-Codebase-Knowledge Tutorial-Codebase-Knowledge&a…...

科技早报晚报|2026年5月14日:调试工作台、Agent 证据格式与多智能体编排,今晚更值得做成产品的 3 个技术机会

科技早报晚报&#xff5c;2026年5月14日&#xff1a;调试工作台、Agent 证据格式与多智能体编排&#xff0c;今晚更值得做成产品的 3 个技术机会 一句话导读&#xff1a;今晚真正值得看的&#xff0c;不是又一个“更会写代码”的 Agent&#xff0c;而是 AI 工具链开始补上的三块…...

英雄联盟智能助手:3分钟上手,让你的游戏体验提升300%

英雄联盟智能助手&#xff1a;3分钟上手&#xff0c;让你的游戏体验提升300% 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄选择犹…...

智能体开发爆发期!程序员现在转型,还能赶上红利吗?

文章目录 前言一、为什么2026年是智能体开发的爆发元年&#xff1f;1.1 市场数据说话&#xff1a;万亿级赛道正在加速形成1.2 企业需求爆发&#xff1a;从"要不要做"到"怎么做"1.3 薪资差距拉大&#xff1a;同样3年经验&#xff0c;薪资差一倍 二、90%程序…...

陈,嵌入式生物医学电子实验箱 电子创新生物医学试验箱 生物医学工程电子试验箱

由硬件、软件、附件、实验教材四部分组成&#xff0c;模块独立、组合灵活&#xff0c;安徽正华&#xff0c;生物&#xff0c;露硬件覆盖主流模拟与数字电路&#xff1a;模拟电路&#xff1a;集成运放、心电放大、滤波、信号发生等典型电路&#xff1b;数字电路&#xff1a;AVR/…...

JTAG IDCODE与SWD协议:嵌入式调试核心技术解析

1. JTAG IDCODE机制深度解析在嵌入式系统调试领域&#xff0c;JTAG IDCODE是调试器识别目标设备的核心机制。这个32位寄存器就像设备的"身份证"&#xff0c;包含了三个关键信息字段&#xff1a;VERSION&#xff08;位[31:28]&#xff09;&#xff1a;设备版本代码&am…...

2026年大模型产品经理成长指南:新手到专家的完整学习路径,大模型产品经理的完整学习路线图!

随着人工智能技术的发展&#xff0c;尤其是大模型&#xff08;Large Model&#xff09;的兴起&#xff0c;越来越多的企业开始重视这一领域的投入。作为大模型产品经理&#xff0c;你需要具备一系列跨学科的知识和技能&#xff0c;以便有效地推动产品的开发、优化和市场化。以下…...

Topit:为什么你的Mac需要这个窗口置顶神器?

Topit&#xff1a;为什么你的Mac需要这个窗口置顶神器&#xff1f; 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经在写代码时需要参考API文档&#…...

构建高可复用表单解决方案:从状态管理到校验引擎的工程实践

1. 项目概述&#xff1a;一个面向开发者的表单实验室如果你是一名前端或全栈开发者&#xff0c;肯定对表单这个“老朋友”又爱又恨。爱它&#xff0c;是因为它是用户与系统交互最核心的桥梁&#xff1b;恨它&#xff0c;是因为从数据绑定、校验、提交到状态管理&#xff0c;每一…...

Jetpack Compose + 协程(Coroutine)完整实战教程

Jetpack Compose 协程&#xff08;Coroutine&#xff09;完整实战教程 现代 Android 开发里&#xff1a; Compose 协程 Flow 已经是官方主流架构。 如果你只会&#xff1a; Button(onClick {})但不会&#xff1a; LaunchedEffectrememberCoroutineScopeStateFlowcollectAsS…...