【ESP32调试-快速入门】
文章目录
- ESP32调试
- 启动调试
- 一. 环境搭建
- 二. 运行OpenOCD
- 1. 烧入blink
- 2. 找到芯片型号对应的脚本文件,并运行脚本命令
- 三. 运行GDB
- 调试技巧
- 一. 设置断点
- 1 添加断点
- 2 查看所有断点、指定断点
- 3 禁止断点
- 4 使能断点
- 5 删除所有断点、指定断点
- 6 设置指定文件行号的断点
- 7 设置函数名断点
- 8 只运行一次断点
- 二. GDB监视断点
- 1 添加监视断点变量
- 2 查看添加的断点变量
- 3 添加监视断点表达式
- 三. GDB 打印命令
- 1 打印整数
- 2 打印不同格式的整数
- 3 打印数组
- 4 打印字符串
- 5 打印结构体
- 6 打印不同函数、不同文件中的变量
- 7 强制设置变量的值
- 四. GDB 显示某个变量的值
- 1 添加显示的变量
- 2 显示已添加显示的变量
- 3 删除已添加显示的某个变量或所有
- 五. GDB 打印指定地址上的信息
- 六. GDB 单步调试
- 1 单步或多步执行(不会进入函数内部)
- 2 单步或多步执行(会进入函数内部)
- 3 运行到指定行
- 七. GDB 用户调试界面(TUI)
- 1 启动、退出TUI
- 2 显示目前程序运行位置
- 3 显示本文件指定行
- 4 显示汇编代码
- 5 显示寄存器
- 6 显示源代码
- 八. GDB 跳转
- 1 忽略一些代码(往后跳转)
- 2 重复一些代码(往前跳转)
- 3 强行运行一些分支代码
- 九. GDB Set Command
- 1 设置代码变量的值
- 2 设置环境变量的值
- 十. GDB Define Command
ESP32调试
启动调试
一. 环境搭建
ESP_IDF环境搭建
二. 运行OpenOCD
1. 烧入blink
如:安装环境中的examples中的blink
路劲:安装环境路劲下Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\blink
①:运行ESP-IDF切换至blink目录下
命令:cd 路劲
②:选择芯片型号
命令:idfpy set-target 型号
③:设置blink GPIO
以GIPIO10为例:
1、进入menuconfig
命令:idf.py menuconfig
2、进入Example Configuration
3、设置Blink GPIO number
选择Blink GPIO number后回车输入10确认后,按S保存,Q退出
④:编译所有
命令:idf.py all
⑤:下载程序
命令:idf.py flash
⑥:重启mcu
2. 找到芯片型号对应的脚本文件,并运行脚本命令
①:查看脚本文件
路劲:安装环境路劲下Espressif\tools\openocd-esp32\v0.11.0-esp32-20220706\openocd-esp32\share\openocd\scripts\board
②:进入对应型号脚本可查看运行命令
如:esp32c3-builting.cfg
③: 输入脚本命令,运行OpenOCD
openocd -f board/esp32c3-builtin.cfg
OpenOCD运行成功,等待GDB连接,另起一个ESP-IDF运行GDB
三. 运行GDB
①:在blink目录下建立gdbinit
文件
注:gdbinit文件没有后缀
②:编写gdbinit
文件,输入一下内容
set remotetimeout 100
target extended-remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c
③:输入命令,运行GDB
命令:riscv32-esp-elf-gdb build/blink.elf -x gdbinit
运行成功
调试技巧
一. 设置断点
1 添加断点
命令:break 行号
break 78
2 查看所有断点、指定断点
命令:info break
命令:info break 断点号
info breakinfo break 78
注:按c
回车,程序继续运行
3 禁止断点
命令:disable 断点号
disable 78
4 使能断点
命令:enable 断点号
enable 78
5 删除所有断点、指定断点
命令:delete
命令:delete 断点号
deletedelete 78
6 设置指定文件行号的断点
命令:break 文件名:行
break blink_example_main.c:78
7 设置函数名断点
命令:break 函数名
break blink_led
注:触发时会停留在函数的第一行
8 只运行一次断点
命令:tbreak 行号
命令:tbreak 函数名
tbreak 78tbreak blink_led
注:此断点一次后会自动删除此断点
二. GDB监视断点
与普通断点不同的是,普通断点是添加断点的位置,比如某个.c文件的第n行,而GDB监视断点是添加某个变量至断点,在程序运行到添加断变量的值发生变化时停下来,并打印原来的值与变化后的值
1 添加监视断点变量
命令:watch 变量
watch tmp_variable
2 查看添加的断点变量
命令:info watch
或 info break
info watch
info break
3 添加监视断点表达式
命令:watch 表达式
不管表达式中的那个变量发生变化都会触发断点停下来
watch tmp_variable_1+tmp_variable_2
三. GDB 打印命令
输出
1 打印整数
命令:print 变量
print tmp_variable
2 打印不同格式的整数
命令:print /格式 变量
print /x tmp_variable
- x 十六进制
- d 有符号十进制
- u 无符号十进制
- o 八进制
- t 二进制(t stands for two)
- a 地址
- c 字符
- f 浮点数
- s 字符串
3 打印数组
命令:print 数组名
print tmp_arr
4 打印字符串
命令:print 字符串
print tmp_str
可设置打印字符串时字符串的地址显示或关闭 set print address on/off
5 打印结构体
命令:print 结构体
print tmp_str
可设置打印结构体时结构体的地址显示或关闭 set print address on/off
可设置打印结构体的显示形式 set print pretty on/off
6 打印不同函数、不同文件中的变量
打印某个函数中变量的值
命令:print 函数名::变量
print tmp_fuc::tmp_value
打印某个文件中变量的值
命令:print '路劲'::变量
print 'E:\ESP32\ESP32_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\blink\main\blink_example_main.c'::tmp_variable
7 强制设置变量的值
命令:print 变量名=值
print tmp_variable=5
四. GDB 显示某个变量的值
用
display
命令添加某个变量后可在程序触发任意断点停下来时打印当前变量的值,与display
不需要每次输入命令去获取变量当前的值,可打印出多个变量的值
1 添加显示的变量
命令:display 变量
display tmp_variable
2 显示已添加显示的变量
命令:info display
info display
3 删除已添加显示的某个变量或所有
命令:delete display n
delete display 1
命令:delete display
delete display
五. GDB 打印指定地址上的信息
命令:x /nfu 地址
n
:打印多少个单位
f
:打印格式
- x 十六进制
- d 有符号十进制
- u 无符号十进制
- o 八进制
- t 二进制(t stands for two)
- a 地址
- c 字符
- f 浮点数
- s 字符串
u
:单位
- b:一个字节
- h:二个字节
- w:四个字节
- g:八个字节
x /1sb 0x3c024928
六. GDB 单步调试
1 单步或多步执行(不会进入函数内部)
单步
命令:next
或 n
多步
命令:next n
next 3
2 单步或多步执行(会进入函数内部)
单步
命令:step
多步
命令:step n
step3
注:如果进入函数内部,想跳出子函数输入finish
3 运行到指定行
命令:until 行号
until 10
七. GDB 用户调试界面(TUI)
1 启动、退出TUI
方法一
启动TUI
命令:tui enable
退出TUI
命令:tui disable
方法二
修改启动文件 gdbinit
添加 tui enable
set remotetimeout 100
target extended-remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c
tui enable
2 显示目前程序运行位置
命令:update
3 显示本文件指定行
命令:list 行号
4 显示汇编代码
命令:layout asm
5 显示寄存器
命令:layout regs
6 显示源代码
命令:layout src
八. GDB 跳转
1 忽略一些代码(往后跳转)
从当前代码跳转到后面指定行,中间的代码被忽略,不会被运行,直接从指定行开始运行
命令:jump 行号
2 重复一些代码(往前跳转)
从当前代码跳转到前面指定行,返回去从指定行开始继续运行
命令:jump 行号
3 强行运行一些分支代码
在某些情况下,一些分支代码是不会得以运行的,这个时候可以用jump
强行跳转过去运行
命令:jump 行号
九. GDB Set Command
1 设置代码变量的值
命令:set var 变量=值
set var i=10
2 设置环境变量的值
命令:set $变量=值
set $a=3;
例:k[5]={0,1,2,3,4};
set $a=0
while($a < 5)
if(k[$a] == 3)
printf "$a = %d, find 3.\n",$a
end
set $a = $a + 1
end打印输出
$a = 3, find 3.
十. GDB Define Command
自定义命令
命令:
define 自定义命令名(按下enter键)
需要执行的命令
end
例:输入my_print
可打印出i、j、f
define my_print
print i
print j
print f
end
【ESP32调试-快速入门】相关推荐
- esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信
MQTT 介绍 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...
- 2.8 其他快速入门必要知识
完成入职后,大家首当其冲的就是开始开始接触各种真实产品.真实产品一般都跨越多个学科,需要大家快速补充各学科基础知识.而且新人入职后,还需要尽快补足各种基本职场技能,如写作.演讲.交流.出差.安全等.因 ...
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- java8生成jsp页面内容组装到jsp中_JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧
.NET Core 快速入门教程 .NET Core 快速学习.入门系列教程.这个入门系列教程主要跟大家聊聊.NET Core的前世今生,以及Windows.Linux(CentOS.Ubuntu)基 ...
- [转载].gdb调试器快速入门
调试在我们编写程序时占有重要的地位.在linux下如何使用gdb调试器?下面采用FQA的方式让你快速了解gdb调试器. 1.如何启动gdb调试器呢? 在终端输入 gdb 程序文件名 即可.注意gdb调 ...
- VSCODE+Arduino生态快速入门ESP32(一)——点个呼吸灯、开个定时器
VSCODE+Arduino生态快速入门ESP32(一)--点个呼吸灯.开个定时器 我手里这块是ESP32WROOM开发板,20多块钱,性价比非常高. 1.环境搭建 环境搭建就不在此赘述,CSDN上的 ...
- 高性价比WIFI图传方案快速入门教程
ESP32-CAM ArduinoIDE开发系列文章目录 第一篇:ESP32-CAM高性价比WIFI图传方案快速入门教程 文章目录 ESP32-CAM ArduinoIDE开发系列文章目录 前言 一. ...
- Expression Blend实例中文教程(2) - 界面快速入门
上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...
最新文章
- 在deepin上安装YouCompleteMe
- 【教程】从人脸检测与比对,实测七牛云人脸核验 API
- 2 打两拍verilog与Systemverilog编码
- JAVA蓝桥杯:高精度算法
- @WebFilter()配置servlet访问出现404的原因
- 谈谈使用Redis缓存时批量删除的几种实现
- dell网卡linux驱动,Dell R720上安装linux网卡驱动
- centos7 lvm分区扩容(空间转移,将/home转至/根分区)
- [N1CTF 2022] solve_pow,baby_N1ES
- [论文阅读]用于车辆轨迹预测的卷积社交池Convolutional Social Pooling for Vehicle Trajectory Prediction
- 4 灰色系统 - 关联度分析法 例子 源代码
- Maven——maven工程找不到maven库
- C#封装,继承,多态
- C语言------函数
- OKR考核系统是怎么制定的?一文带你学会OKR制定标准流程
- keil c语言pdf,Keil软件“C语言”与“汇编”混编 —— 相关知识整理.pdf
- Packet Capture(Android APP端抓包工具)
- 飞行射击类游戏,Helloworldgame
- 【考研经验】2018中南大学计算机考研经验分享
- 相机标定的理解及采用opencv和matlab工具箱的标定方法