[Debugger]调试Arm设备

GDB调试Arm设备

2024-7-5

hongxi.zhu

1. 调试Cortex-M设备

以stm32 mcu为例子

芯片:stm32c011

debugger probe: st-link v2.1

1.1 运行openocd

 openocd -f interface/stlink-v2.cfg  -f target/stm32c0x.cfg

1.2 运行gdb

arm-none-eabi-gdb .\STM32C011F6P6_WDT.elf

进入gdb环境,连接到设备

target extended-remote :3333
monitor reset
monitor halt
load

2. 调试Cortex-A设备

附录:gdb相关命令

  • 启动GDB
gdb 文件名
  • 退出gdb
quit
  • 程序的输入输出。
显示你程序用到的终端的模式。
info terminal使用重定向控制程序输出。
如:run > outfiletty命令可以指写输入输出的终端设备。
如:tty /dev/ttyb
  • 程序运行参数。
set args 可指定运行时参数。
(如:set args 10 20 30 40 50)show args 命令可以查看设置好的运行参数。
  • 列出代码内容
list 行号
  • 运行程序
第一种:run 或者 r
第二种:start
  • 设置断点
breakpoint 行号 或者 b 行号
  • 列出断点信息
info break 或者 info b
  • 删除断点
delete 断点序号 或者 d 断点序号
  • 打开和关闭断点
disable 断点序号
enable 断点序号
  • 逐过程调试(不进入函数内部)
next 或者 n
  • 单步调试
step 或者 s
  • 查看堆栈信息(在函数间跳转时)
backtrace 或者 bt
  • 结束堆栈(跳出当前函数回到调用的地方)
finish
  • 查看变量的值
print 变量名 或者 p 变量名
  • 长显示变量的值
display 变量名
undisplay 变量名
  • 修改变量的值
set 变量名 = 值
  • 跳转到指定行
until 行号
  • 跳转到下一个断点
continue 
  • 查看寄存器
info registers
  • 查看arm通用的r0~r15寄存器, 如r0
print $r0
  • TUI方式相关
layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layoutCtrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口
  • monitor命令相关(openocd gdbserver专属)
1. 重置目标设备:
monitor reset
这个命令会重置目标设备(如STM32)到初始状态1。2. 暂停目标设备:
monitor halt
这个命令会暂停目标设备的执行,以便进行调试1。3. 设置和查询JTAG/SWD速度:
monitor jtag_khz 1000
monitor swd_khz 1000
monitor jtag_speed
monitor swd_speed
这些命令用于设置JTAG或SWD接口的通信速度,并查询当前速度2。4. 查询和设置TAP(测试访问端口):
monitor tap <tap_name>
monitor tap_configure <tap_name>
这些命令用于查询和配置TAP,TAP是JTAG/SWD协议中用于访问目标设备内部组件的接口3。5. 加载或擦除目标设备上的程序:
具体的命令可能依赖于你的硬件配置和使用的调试器,但通常你可以使用类似下面的命令来加载或擦除目标设备上的程序:
monitor flash bank select <bank_number>
monitor flash erase_address <address> <length>
monitor flash write_image erase <filename> <address>
这些命令用于选择闪存银行、擦除指定地址的闪存内容、以及将映像文件写入到目标设备的闪存中4。6. 查询目标设备信息:
monitor target_info
这个命令用于查询目标设备的信息,如设备ID、处理器类型等2。
  • 反汇编代码
disassemble 或 disas
  • 设置观察点(WatchPoint)
观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:watch <expr>
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。rwatch <expr>
当表达式(变量)expr被读时,停住程序。awatch <expr>
当表达式(变量)的值被读或被写时,停住程序。info watchpoints
列出当前所设置了的所有观察点。
  • 设置捕捉点(CatchPoint)
你可设置捕捉点来捕捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:catch <event>当event发生时,停住程序。event可以是下面的内容:1、throw 一个C++抛出的异常。(throw为关键字)2、catch 一个C++捕捉到的异常。(catch为关键字)3、exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)4、fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)5、vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)6、load 或 load <libname> 载入共享库(动态链接库)时。(load为关键字,目前只在HP-UX下有用)7、unload 或unload <libname>卸载共享库(动态链接库)时。(unload为关键字,只在HP-UX下有用)tcatch <event>
只设置一次捕捉点,当程序停住以后,应点被自动删除。

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

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

相关文章

13 协程设计原理与汇编实现

协程的问题 为什么要有协程?协程的原语操作?协程的切换?协程的struct如何定义?协程的scheduler(调度)如何定义?调度策略如何实现?协程如何与posix,api兼容?协程多核模式?协程的性能如何测试?为什么要有协程 同步的编程方式,异步的性能。同步编程时,我们需要等待io就…

信息技术课堂纪律管理:从混乱到秩序的智慧转型

引言&#xff1a; 在信息爆炸的时代&#xff0c;信息技术课程如同一把开启未来世界大门的钥匙&#xff0c;为学生们搭建起探索科技奥秘的桥梁。然而&#xff0c;面对着屏幕背后的无限诱惑&#xff0c;维持课堂纪律&#xff0c;确保学生们专注于学习&#xff0c;成为了每位信息…

C/C++内存分布

1.内存分布简略图 2.全局变量和静态变量的区别 (1)局部静态变量&#xff1a;存储在数据段中&#xff0c;局部静态变量的作用域在当前函数中&#xff0c;出了函数就不能使用该变量&#xff0c;但局部静态变量的生命周期是在整个程序间&#xff0c;局部静态变量要运行到这一行才…

【Java14】构造器

Java中的构造器在创建对象&#xff08;实例&#xff09;的时候执行初始化。Java类必须包含一个或一个以上的构造器。 Java中的构造器类似C中的构造函数。 Java中对象&#xff08;object&#xff09;的默认初始化规则是&#xff1a; 数值型变量初始化为0&#xff1b;布尔型变量…

【CSAPP】-cachelab实验

目录 实验目的与要求 实验设备与软件环境 实验过程与结果&#xff08;可贴图&#xff09; 操作异常问题与解决方案 实验总结 实验目的与要求 1、掌握应用程序性能的优化方法&#xff1b; 2、理解存储器层次结构在程序运行过程中所起的重要作用&#xff1b; 3、让学生更好…

深入十余家老年鞋品牌,我们发现了193亿市场的最新趋势

老年鞋品牌重构的商业逻辑 干货抢先看 1. 老年鞋产业已成风口&#xff0c;预计2027年市场规模达193亿元。 2. 在产品力成为竞争优势下&#xff0c;舒适安全始终是消费者的关键考虑因素。 3. 随着新老年群体触网率的提升&#xff0c;许多银发族开始抢购新中式和年轻潮鞋等时髦…

高考志愿填报的六个不要

在高考志愿填报这个关键时刻&#xff0c;确实需要谨慎行事&#xff0c;避免一些常见的错误。以下是高考志愿填报的六个“不要”&#xff0c;希望能为你提供一些有用的建议&#xff1a; 1、不要盲目跟风 每个人的兴趣、能力和未来规划都不同&#xff0c;不要仅仅因为某个专业或…

JDK底层类ArrayList的序列化和反序列化

序列化和反序列化的过程就是生成和解析字节码的过程。JDK底层ArrayList的序列化和反序列化 //实现了Serializable接口,可以被序列化public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable{…

Gradle基础:从入门到掌握

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 在现代软件开发中&#xff0c;自动化构建工具是提高效率和管理依赖的重要手段。而Gradle作为一种灵活且强大的构…

python基础篇(9):模块

1 模块简介 Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾. 模块能定义函数&#xff0c;类和变量&#xff0c;模块里也能包含可执行的代码. 模块的作用: python中有很多各种不同的模块, 每一个模块都可以帮助我们快速的实现一些功能, 比如实现…

工业4.0视角下:PLC转OPC UA网关的作用

在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;是常见的控制设备&#xff0c;而OPC UA&#xff08;开放型工业自动化统一架构&#xff09;协议则是一种现代化的通信协议&#xff0c;用在工厂自动化系统中实现设备之间的数据交换和通信。PLC转OPC U…

TensorRT动态形状(Dynamic Shape)出错,官方demo+自己模型运行时出错

(2024.7.2) 使用TensorRT处理动态输入形状推理时出现的错误&#xff0c;本案基于官方demo文件&#xff0c;已解决&#xff1a; TensorRT版本10.0&#xff0c;官方例子使用的是这个https://github.com/NVIDIA/trt-samples-for-hackathon-cn/blob/master/cookbook/01-SimpleDem…

贝叶斯估计(1):期末大乱炖

写在前面&#xff01; 1 先验分布和后验分布 三种信息&#xff1a;总体信息、样本信息、先验信息 总体信息&#xff1a;“总体是正态分布”&#xff1b;样本信息&#xff1a;总体抽取的样本提供的信息&#xff0c;是最新鲜的信息&#xff1b;先验信息&#xff1a;在抽样之前就…

Excel数据截取及合并多行多列数据

公式一&#xff1a;RIGHT(A2,LEN(A2)-FINDB(")",A2)) 公式二&#xff1a;PHONETIC(C2:D19) 详情可以看附件。

AJAX快速入门(一) express框架的安装和使用范例

主打一个有用 首先保证安装了nodejs环境 打开终端 初始化npm npm init安装express npm i express测试样例 目录结构 样例代码 express.js //引入express const express require(express);//创建应用对象 const app express();//创建路由规则 //req是请求对象&#x…

MetaPoint_速读

Meta-Point Learning and Refining for Category-Agnostic Pose Estimation https://arxiv.org/abs/2404.14808https://github.com/chenbys/metapointabstract 这篇文章介绍了一种名为Meta-Point Learning and Refining的框架&#xff0c;用于实现类别不可知的姿势估计。该框…

小红的因式分解(牛客周赛50)

要将 ax2bxc分解为 (a1xb1)(a2xb2)的形式&#xff0c;输出a1,a2,b1,b2,否则输出NO (a1xb1)(a2xb2)a1a2x(a1b2a2b1)xb1b2,所以aa1a2,ba1b2a2b1,cb1b2 #include<bits/stdc.h> using namespace std; void sol(){ int a,b,c;cin>>a>>b>>c; for(in…

一文清晰了解HTML——简单实例

想要仿照该页面编写HTML代码&#xff1a; 在vscode中输入&#xff01;自动生成默认模板&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

第二证券股市资讯:深夜!突然暴涨75%!

一则重磅收买引发医药圈轰动。 北京时间7月8日晚间&#xff0c;美股开盘后&#xff0c;美国生物制药公司Morphic股价一度暴升超75%。音讯面上&#xff0c;生物医药巨子礼来公司官宣&#xff0c;将以57美元/股的价格现金收买Morphic&#xff0c;较上星期五的收盘价溢价79%&…

19_谷歌GoogLeNet(InceptionV1)深度学习图像分类算法

1.1 简介 GoogLeNet&#xff08;有时也称为GoogleNet或Inception Net&#xff09;是一种深度学习架构&#xff0c;由Google的研究团队在2014年提出&#xff0c;主要设计者为Christian Szegedy等人。这个模型是在当年的ImageNet大规模视觉识别挑战赛&#xff08;ILSVRC&#xf…