ESP32 在Arduino開發環境中,如果程序運行報錯如何定位程序報錯是哪行代碼

在開發中,我們常常會遇到編譯正常,但是運行過程中程序報錯,然后重啟,在這種情況下,又沒法知道是哪段程序引起的,現在我們就來解決這個問題。

其實ESP32的SDK中已經附帶這些debug的工具了。

首先如果我們程序如果運行出錯,那么在串口log中一定會看到dump出的內存地址信息。而我們使用這些信息通過工具就能定位回程序代碼。

在Arduino中程序編譯后會有一個緩存的文件夾,里面包含了編譯的文件,它的路徑類似以下這樣

C:\Users\用戶名\AppData\Local\arduino\sketches\7640961C8FD4426D6DA420FEF9E4113E

其中的“7640961C8FD4426D6DA420FEF9E4113E”是程序生成的,每個人的都不一樣,你可以根據sketches目錄下的文件日期來確定當前最新編譯的是哪個文件夾,通過排序“修改日期”,例如這樣來找到,點進去后里面的文件命名和你的工程命名一樣就是正確的了

進去后我們找到一個文件,你的工程名.ino.elf? 這樣后綴的一個文件,好記錄下這個文件的路徑,以備用

下一步,我們要找到ESP32 SDK工具的路徑,一般在這個路徑下,如果安裝的Arduino IDE的版本不一樣的話,或者ESP32 SDK的版本不一樣的話,這里的路徑中的文件名可能不一樣,但是都大同小異,我們最終要找的執行文件是??riscv32-esp-elf-addr2line.exe,只要確保到是這個exe文件的地址就好了

C:\Users\用戶名\AppData\Local\Arduino15\packages\esp32\tools\esp-rv32\2405\bin

好準備完成,接下來就開始使用了

在控制臺中運行命令

 C:\Users\用戶名\AppData\Local\Arduino15\packages\esp32\tools\esp-rv32\2405\bin\riscv32-esp-elf-addr2line.exe -pfiaC -e C:\Users\用戶名\AppData\Local\arduino\sketches\7640961C8FD4426D6DA420FEF9E4113E\你的工程名.ino.elf 0x00060033

按照你的路徑和編譯文件路徑來,最后的0x00060033 是程序出錯串口中log打印出來的地址

一般是traceback? 或者? PC 后面的地址,都可以試試看

然后我們得到的就是具體報錯的代碼的位置了,例如這樣(我這個就是tasks.c文件的3274行代碼報錯)

0x4008faf5: xTaskIncrementTick at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/FreeRTOS-Kernel/tasks.c:3274

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83004.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83004.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83004.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 包管理器 uv 介紹

Python 包管理器 uv 全面介紹 uv 是由 Astral(熱門工具 Ruff 的開發者)推出的下一代高性能 Python 包管理器和構建工具,用 Rust 編寫。它旨在解決傳統工具(如 pip、virtualenv、pip-tools)的性能瓶頸,同時…

win10啟動時小鍵盤燈默認不亮怎么辦

第一步,按winR,打開運行。 第二步,輸入regedit,打開注冊表。 第三步,在注冊表編輯器中,依次展開HKEY_ USERS --》.DEFAULT --》Control Panel --》Keyboard , 第四步,選中Keyboard 之后在右側窗…

C盤的“下載”修改位置時出錯了,怎么還原

本來想修改“下載”的位置,結果直接成D盤的快捷鍵了。 正常應該是D盤里面的一個文件夾,而不是D盤。 而且打開D盤,里面的文件夾,全部按照時間分區顯示了,而不是正常的文件顯示。 解決辦法: 1、還原下載路…

量化面試綠皮書:7. 100的階乘中有多少個尾隨零

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 7. 100的階乘中有多少個尾隨零 Q: 100 ! 100! 100!(100 的階乘)中有多少個尾隨零? A: 100 ! 100! 100…

Java 常用 API 分類總結(算法競賽考前速記篇)- 適用于算法競賽(如 CCF CSP、藍橋杯、NOI)

以下是Java 常用 API 的系統性總結,特別適用于算法競賽(如 CCF CSP、藍橋杯、NOI)場景。按照功能分類,并給出代表性方法及簡要用法說明,方便復習與帶入考場: ? Java 常用 API 分類總結(算法競賽…

重復文件管理 一鍵清理重復 圖片 文檔 免費 超輕量無廣告

各位電腦小衛士們!今天給你們介紹一款超厲害的軟件——ZZYDupFile,它是專門搞重復文件管理的輕量級工具,能幫咱快速找到并清理電腦里的重復文件。接下來我就詳細說說它的那些優點。 軟件下載地址安裝包 首先說說它的核心功能。它查重有好幾…

本地部署企業郵箱,讓企業辦公更安全高效

在當今數字化辦公時代,企業郵箱作為企業溝通協作的重要工具,承載著企業業務往來和辦公協同的重要職能。基于安全性、個性化需求、系統集成等方面的考量,越來越多的企業傾向于選擇本地部署企業郵箱,本地化部署不僅能夠有效守護企業…

基于深度強化學習的智能機器人導航系統

前言 隨著人工智能技術的飛速發展,機器人在日常生活和工業生產中的應用越來越廣泛。其中,機器人導航技術是實現機器人自主移動的關鍵。傳統的導航方法依賴于預設的地圖和路徑規劃算法,但在復雜的動態環境中,這些方法往往難以適應。…

gorm 配置數據庫

介紹 GORM 是 Go 語言中最流行的 ORM(對象關系映射)庫之一,基于數據庫操作的封裝,提供類似 Django ORM / SQLAlchemy 的開發體驗。 特性描述支持多種數據庫MySQL、PostgreSQL、SQLite、SQL Server、ClickHouse 等自動遷移自動根…

k8s4部署

configMap configmap概述:數據會存儲在etcd數據庫,其應用場景主要在應用程序的配置 configmap支持的類型(1)鍵值對(2)多行數據 pod使用configmap資源有兩種常見的方式(1)變量注入&a…

2025HNCTF - Crypto

Crypto lcgp 題目: from Crypto.Util.number import * import gmpy2 import random n getPrime(1024) flag bH&NCTF{ str(uuid.uuid4()).encode() b} flagbytes_to_long(flag) e 2024 cpow(e, flag, n)class LCG:def __init__(self, seed, a, b, m):sel…

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在離線機器上運行軟件,所以得把軟件用docker打包起來,大部分功能都沒問題,出了一個奇怪的事情。同樣的代碼,在本機上用vscode可以運行起來,但是打包之后在docker里出現了問題。使用的是dialog組件,…

前后端分離開發 和 前端工程化

來源:黑馬程序員JavaWeb開發教程,實現javaweb企業開發全流程(涵蓋SpringMyBatisSpringMVCSpringBoot等)_嗶哩嗶哩_bilibili 前后端混合開發: 需要使用前端的技術棧開發前端的功能,又需要使用Java的技術棧…

QT線程同步 QReadWriteLock并發訪問

QT多線程專欄共有17篇文章,從初識線程到、QMutex鎖、QSemaphore信號量、Emit、Sgnals、Slot主線程子線程互相傳值同步變量、QWaitCondition、QReadWriteLock、事件循環、QObjects、線程安全、線程同步、線程異步、QThreadPool線程池、ObjectThread多線程操作、 moveToThread等…

【物聯網-ModBus-RTU

物聯網-ModBus-RTU ■ 優秀博主鏈接■ ModBus-RTU介紹■(1)幀結構■(2)查詢功能碼 0x03■(3)修改單個寄存器功能碼 0x06■(4)Modbus RTU 串口收發數據分析 ■ 優秀博主鏈接 Modbus …

03.數據類型

數據類型 數據長什么樣數據需要多少空間來存放系統內置數據類型用戶定義數據類型 選擇正確的數據類型對于獲得高性能至關重要 三大原則: 更小的通常更好,盡量使用可正確存儲數據的最小數據類型簡單就好,簡單數據類型的操作通常需要更少的CPU周期盡量…

達夢數據庫字段類型 varchar 轉 text

達夢數據庫字段類型 varchar 轉 text 業務場景問題浮現問題處理方式一 總結 業務場景 在初次創建達夢數據庫表的時候,僅僅設定了基礎的表字段。然而,在預估字段值的長度時,常常會出現不夠準確的情況。例如,我創建了一張參數配置表…

MyBatis 緩存機制源碼深度解析:一級緩存與二級緩存

MyBatis 緩存機制源碼深度解析:一級緩存與二級緩存 一、一級緩存1.1 邏輯位置與核心源碼解析1.2 一級緩存容器:PerpetualCache1.3 createCacheKey 方法與緩存命中1.4 命中與失效時機1.5 使用方式 二、二級緩存2.1 邏輯位置與核心源碼解析2.2 查詢流程、命…

【題解-Acwing】1097. 池塘計數

題目:1097. 池塘計數 題目描述 農夫約翰有一片 N?M 的矩形土地。 最近,由于降雨的原因,部分土地被水淹沒了。 現在用一個字符矩陣來表示他的土地。 每個單元格內,如果包含雨水,則用”W”表示,如果不含…

基于Flask框架的前后端分離項目開發流程是怎樣的?

基于Flask框架的前后端分離項目開發流程可分為需求分析、架構設計、并行開發、集成測試和部署上線五個階段。以下是詳細步驟和技術要點: 一、需求分析與規劃 1. 明確項目邊界 功能范圍:確定核心功能(如用戶認證、數據管理、支付流程&#…