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

[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>
只设置一次捕捉点,当程序停住以后,应点被自动删除。

相关文章:

  • nginx配置代理
  • 基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网
  • 每日新闻 7月9日 星期二
  • uniapp开发android调试工具
  • 【前端】使用chrom浏览器Network,查看前后台数据传输请求
  • 系统架构的基础:定义、原则与发展历程
  • C语言 输出n阶魔方阵
  • 语法糖:代码中的甜品
  • 世上最懂交易原理的是佛学
  • VS2019运行报错 应输入预处理器指令
  • 通信网络机房服务器搬迁方案要求
  • Java面试八股之MySQL的redo log和undo log
  • Drools开源业务规则引擎(五)- jBPM流程图元素介绍
  • 7.8作业
  • 仪表板展示|DataEase看中国:2023年中国新能源汽车经济运行情况分析
  • Google 是如何开发 Web 框架的
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • 5、React组件事件详解
  • CSS实用技巧干货
  • js
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 第2章 网络文档
  • 关于List、List?、ListObject的区别
  • 后端_ThinkPHP5
  • 批量截取pdf文件
  • 使用 QuickBI 搭建酷炫可视化分析
  • 思考 CSS 架构
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 提醒我喝水chrome插件开发指南
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​卜东波研究员:高观点下的少儿计算思维
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (LeetCode) T14. Longest Common Prefix
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)c++ std::pair 与 std::make
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Core中Emit的使用
  • .NET命令行(CLI)常用命令
  • .NET中分布式服务
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @SpringBootApplication 包含的三个注解及其含义
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [2669]2-2 Time类的定义
  • [AX]AX2012 R2 出差申请和支出报告
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务