本應(yīng)用筆記描述了在 Windows 平臺(tái)使用 VS Code 調(diào)試 RT-Thread qemu-vexpress-a9 BSP 工程。
本文的目的和結(jié)構(gòu)
本文的目的和背景
VS Code(全稱 Visual Studio Code)是一個(gè)輕量且強(qiáng)大的代碼編輯器,支持 Windows,OS X 和 Linux。內(nèi)置 JavaScript、TypeScript 和 Node.js 支持,而且擁有豐富的插件生態(tài)系統(tǒng),可通過安裝插件來支持 C++、C#、Python、PHP 等其他語(yǔ)言。
本文主要介紹在 Windows 平臺(tái)使用 VS Code 調(diào)試 qemu-vexpress-a9 BSP 工程。
本文的結(jié)構(gòu)
本文主要介紹 VS Code 調(diào)試準(zhǔn)備工作以及如何調(diào)試工程。
準(zhǔn)備工作
下載 RT-Thread 源碼,推薦下載3.1.0及以上版本。
下載 RT-Thread Env 工具,推薦下載1.0.0及以上版本。
https://www.rt-thread.org/document/site/rtthread-development-guide/rtthread-tool-manual/env/env-user-manual/
下載 VS Code
https://code.visualstudio.com/Download
以上網(wǎng)址請(qǐng)復(fù)制至瀏覽器打開
運(yùn)行和調(diào)試 RT-Thread
步驟一 安裝調(diào)試插件
在 VS Code Extensions 里下載并安裝支持 C/C++ 的調(diào)試插件:
安裝好后確認(rèn)插件為以下狀態(tài),如果不是則點(diǎn)擊重新加載:
步驟二 打開 VS Code 項(xiàng)目工程
在 Env 控制臺(tái)進(jìn)入 qemu-vexpress-a9 BSP 根目錄,然后輸入命令code .打開 VS Code。
VS Code 打開后會(huì)自動(dòng)打開 qemu-vexpress-a9 BSP 文件夾,如下圖所示。
步驟三 編譯 RT-Thread
點(diǎn)擊 VS Code “查看 -> 終端” 打開 VS Code 內(nèi)部終端,在終端里輸入命令scons即可編譯工程,終端會(huì)打印出編譯信息。
編譯完成后輸入.qemu.bat命令就可以運(yùn)行工程。終端會(huì)輸出 RT-Thread 啟動(dòng) logo 信息,QEMU 也運(yùn)行了起來。
注意事項(xiàng):
1、調(diào)試 BSP 工程前需要先編譯工程生成 rtthread.elf 文件。
2、可以使用scons --target=vsc -s命令更新 VS Code 需要用到的 C/C++ 頭文件搜索路徑信息。不是每次都需要更新,只有在使用了 menuconfig 重新配置了 RT-Thread 或更改了 rtconfig.h 頭文件時(shí)才需要。
步驟四 修改 qemu-dbg.bat 文件
開始調(diào)試前需要編輯qemu-vexpress-a9目錄下的qemu-dbg.bat文件,在 qemu-system-arm 前加入 start :
@echo offif exist sd.bin goto run qemu-img create -f raw sd.bin 64M :run start qemu-system-arm -M vexpress-a9 -kernel rtthread.elf -serial stdio -sd sd.bin -S -s
步驟五 調(diào)試工程
如下圖所示,在 VS Code 里點(diǎn)擊調(diào)試菜單(小蟲子圖標(biāo)),調(diào)試平臺(tái)選擇 Windows,然后按 F5 就可以開啟 QEMU 調(diào)試模式,斷點(diǎn)停留在 main 函數(shù)。VS Code 調(diào)試選項(xiàng)如下圖所示:
QEMU 也運(yùn)行了起來,如下圖所示。
在 VS Code 里可以使用 GDB 命令,需要在最前面加上-exec。 例如-exec info registers命令可以查看寄存器的內(nèi)容:
其他一些主要命令介紹如下所示:
查看內(nèi)存地址內(nèi)容:x/ ,各個(gè)參數(shù)說明如下所示:
n 是一個(gè)正整數(shù),表示需要顯示的內(nèi)存單元的個(gè)數(shù),也就是說從當(dāng)前地址向后顯示幾個(gè)內(nèi)存單元的內(nèi)容,一個(gè)內(nèi)存單元的大小由后面的 u 定義
f 表示顯示的格式,參見下面。如果地址所指的是字符串,那么格式可以是 s。其他格式如下表所示:
u 表示從當(dāng)前地址往后請(qǐng)求的字節(jié)數(shù),如果不指定的話,GDB 默認(rèn)是 4 個(gè) bytes。u 參數(shù)可以用下面的字符來代替,b 表示單字節(jié),h 表示雙字節(jié),w 表示四字 節(jié),g 表示八字節(jié)。當(dāng)我們指定了字節(jié)長(zhǎng)度后,GDB 會(huì)從指內(nèi)存定的內(nèi)存地址開始,讀寫指定字節(jié),并把其當(dāng)作一個(gè)值取出來。
addr 表示一個(gè)內(nèi)存地址。
注意事項(xiàng):嚴(yán)格區(qū)分 n 和 u 的關(guān)系,n 表示單元個(gè)數(shù),u 表示每個(gè)單元的大小。
示例:x/3uh 0x54320表示從內(nèi)存地址 0x54320 讀取內(nèi)容,h 表示以雙字節(jié)為一個(gè)單位,3 表示輸出三個(gè)單位,u 表示按十六進(jìn)制顯示。
查看當(dāng)前程序棧的內(nèi)容: x/10x $sp--> 打印 stack 的前 10 個(gè)元素查看當(dāng)前程序棧的信息: info frame----list general info about the frame查看當(dāng)前程序棧的參數(shù): info args---lists arguments to the function查看當(dāng)前程序棧的局部變量: info locals---list variables stored in the frame查看當(dāng)前寄存器的值:info registers(不包括浮點(diǎn)寄存器) info all-registers(包括浮點(diǎn)寄存器)查看當(dāng)前棧幀中的異常處理器:info catch(exception handlers)
Tips:輸入命令時(shí)可以只輸入每個(gè)命令的第一個(gè)字母。例如:info registers可以只輸入i r。
注意事項(xiàng)
如果在 VS Code 目錄中額外添加了文件夾,會(huì)導(dǎo)致調(diào)試不能夠啟動(dòng)。
每次開始調(diào)試都需要使用 Env 工具在 BSP 根目錄使用code .命令打開 VS Code 才能正常調(diào)試工程。
參考
Env 工具使用手冊(cè)
常見問題
Env 工具的相關(guān)問題請(qǐng)參考 Env 工具使用手冊(cè)的常用資料鏈接小節(jié)。
提示找不到 ‘qemu-system-arm’。
解決方法:直接打開 VS Code 調(diào)試工程會(huì)有這個(gè)錯(cuò)誤,請(qǐng)使用 Env 工具在 BSP 根目錄使用code .命令打開 VS Code 。
VS Code 調(diào)試選項(xiàng)沒有出現(xiàn) Debug@windows選項(xiàng)。
解決方法:請(qǐng)更新RT-Thread源代碼到3.1.0及以上版本。
-
WINDOWS
+關(guān)注
關(guān)注
4文章
3567瀏覽量
89240 -
編輯器
+關(guān)注
關(guān)注
1文章
806瀏覽量
31282 -
生態(tài)系統(tǒng)
+關(guān)注
關(guān)注
0文章
703瀏覽量
20779
原文標(biāo)題:【RTOS專欄】使用 VS Code + QEMU 調(diào)試 RT-Thread
文章出處:【微信號(hào):elecfans,微信公眾號(hào):電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論