文章目录

  • 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 watchinfo break

info watch
info break

3 添加监视断点表达式

命令:watch 表达式
不管表达式中的那个变量发生变化都会触发断点停下来

watch tmp_variable_1+tmp_variable_2

三. GDB 打印命令

输出 print 命令打印某个变量的值

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 命令添加某个变量后可在程序触发任意断点停下来时打印当前变量的值,与 print 命令相比,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 单步或多步执行(不会进入函数内部)

单步
命令:nextn
多步
命令: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调试-快速入门】相关推荐

  1. esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信

    MQTT 介绍 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...

  2. 2.8 其他快速入门必要知识

    完成入职后,大家首当其冲的就是开始开始接触各种真实产品.真实产品一般都跨越多个学科,需要大家快速补充各学科基础知识.而且新人入职后,还需要尽快补足各种基本职场技能,如写作.演讲.交流.出差.安全等.因 ...

  3. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  4. java8生成jsp页面内容组装到jsp中_JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  5. .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧

    .NET Core 快速入门教程 .NET Core 快速学习.入门系列教程.这个入门系列教程主要跟大家聊聊.NET Core的前世今生,以及Windows.Linux(CentOS.Ubuntu)基 ...

  6. [转载].gdb调试器快速入门

    调试在我们编写程序时占有重要的地位.在linux下如何使用gdb调试器?下面采用FQA的方式让你快速了解gdb调试器. 1.如何启动gdb调试器呢? 在终端输入 gdb 程序文件名 即可.注意gdb调 ...

  7. VSCODE+Arduino生态快速入门ESP32(一)——点个呼吸灯、开个定时器

    VSCODE+Arduino生态快速入门ESP32(一)--点个呼吸灯.开个定时器 我手里这块是ESP32WROOM开发板,20多块钱,性价比非常高. 1.环境搭建 环境搭建就不在此赘述,CSDN上的 ...

  8. 高性价比WIFI图传方案快速入门教程

    ESP32-CAM ArduinoIDE开发系列文章目录 第一篇:ESP32-CAM高性价比WIFI图传方案快速入门教程 文章目录 ESP32-CAM ArduinoIDE开发系列文章目录 前言 一. ...

  9. Expression Blend实例中文教程(2) - 界面快速入门

    上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...

最新文章

  1. 在deepin上安装YouCompleteMe
  2. 【教程】从人脸检测与比对,实测七牛云人脸核验 API
  3. 2 打两拍verilog与Systemverilog编码
  4. JAVA蓝桥杯:高精度算法
  5. @WebFilter()配置servlet访问出现404的原因
  6. 谈谈使用Redis缓存时批量删除的几种实现
  7. dell网卡linux驱动,Dell R720上安装linux网卡驱动
  8. centos7 lvm分区扩容(空间转移,将/home转至/根分区)
  9. [N1CTF 2022] solve_pow,baby_N1ES
  10. [论文阅读]用于车辆轨迹预测的卷积社交池Convolutional Social Pooling for Vehicle Trajectory Prediction
  11. 4 灰色系统 - 关联度分析法 例子 源代码
  12. Maven——maven工程找不到maven库
  13. C#封装,继承,多态
  14. C语言------函数
  15. OKR考核系统是怎么制定的?一文带你学会OKR制定标准流程
  16. keil c语言pdf,Keil软件“C语言”与“汇编”混编 —— 相关知识整理.pdf
  17. Packet Capture(Android APP端抓包工具)
  18. 飞行射击类游戏,Helloworldgame
  19. 【考研经验】2018中南大学计算机考研经验分享
  20. 相机标定的理解及采用opencv和matlab工具箱的标定方法

热门文章

  1. Java中多个线程的并发演示。
  2. IT忍者神龟之css规范
  3. SharePoint 混合单点--Azure访问控制服务(ACS)与S2S身份验证信任
  4. 删库不要跑,我站起来还可以删
  5. QLabel实现图片轮播效果
  6. FCRA题库及答案(未完待续)
  7. “揭秘”低代码平台中的安全协同办公功能
  8. Log4j的作用和使用步骤
  9. 论文翻译-语音合成:WaveNet
  10. SRS文档 软件需求说明书