做過嵌入式開發的工程師肯定都知道有這么個玩意兒 —— J-Trace,與我們日常使用的普通調試器不同點在于,它在基本的下載/調試代碼之上還具有非常強大的代碼運行跟蹤能力,從而實現代碼覆蓋率的分析、指令回溯、CPU 資源監控等一系列強大的功能。有了它,絕大多數的 BUG 可以說是無所遁形,其什么時候出現的,怎么出現的,在完整的 trace 記錄下一目了然,大大提高了解決問題的速度及體驗!
然而,功能強歸強,但我相信絕大多數工程師和我一樣,還從來沒有體驗過 J-Trace 帶來的便利!因為其強大的功能背后是感人的價格,有多感人?我們來看下官方定價:
1980 歐元,按照當前匯率,就是 1.6 個 W:
我們再看看萬能的淘寶有沒有漏網之魚:
確實存在價格更低的,但不多,且畢竟不是官方,是不是全新正品咱也不敢保證。那對于我們這些經費有限的工程師來說,是不是就永遠沒法體驗到這種高端且強大的調試功能了呢?
NO! NO! NO! 前段時間我們的國產 RTOS RT-Thread 開發團隊為我們帶來了其最新的硬件產品?RT-Trace,為我們打開了國產高端調試工具的大門!當然有了 J-Trace 給我們帶來的遺憾,首要任務肯定是看其價格,它的官方店鋪定價如下:
不可否認,這個價格比市面上絕大多數的調試器都要貴好多,但相比與 J-Trace,那簡直是接近一折的差距!再看其功能,官方介紹如下:
-
Trace 功能:
-
基于 SWO 的 RT-Thread OS 跟蹤 (Trace) 功能,無需額外安裝軟件,捕獲線程關系。
-
免安裝的 Web UI ,直接在瀏覽器中實時顯示線程間的調用關系。
-
以高速 SWO Trace 為基礎, 后續升級固件支持持久化線程運行記錄,統計各線程用量與 CPU 隨時間的工作負載。
-
后續升級支持 TPIU Trace 接口,可以觀察到更多內部信息。
-
-
Monitor 功能:
-
多通道數據實時采集與監控。
-
Web UI 中通過波形圖與油表圖生動呈現數據。
-
支持自定義監控界面布局。
-
-
傳統調試功能:
-
支持 SWD/JTAG 調試,速率可達到 20Mhz。
-
支持 VCP 串口透傳,最高透傳速率可達 10Mbps。
-
支持內置 GDB-Server,支持基本GDB調試功能。
-
支持 Flash 燒錄,UI 操作方便高效。
-
-
輔助功能:
-
板載顯示屏,支持離線交互操作,并顯示當前狀態。
-
板載大空間存儲,支持自動化擴展,支持持久化 Data Log 記錄。
-
顯示屏可選調試端口供電,支持JTAG接口引腳功能復用。
-
板載以太網接口,支持遠程操作。
-
遠程OTA升級維護固件。
-
看起來功能也挺豐富,當然這里也要說明一下,這里面有部分功能是還在開發當中,其固件也在持續更新,并且根據我與官方開發人員的溝通,后續還會拓展更多功能!
我也是有幸拿到官方提供的樣機,必須要來試用一下。當然由于功能比較多,且目前有部分還在開發中,因此本文先對其基本的下載/調試以及核心的 Trace 功能進行測試。后續這個測試也會持續進行,并將所有相關文章收錄至 RT-Trace 合集中。
測試正式開始,首先給 RT-Trace 連上電源和網線,并將其 JTAG/SWD 調試接口與開發板相連:
可以看到屏幕正常點亮,且識別到與開發板的調試口電源為 3.3V,下方顯示了 RT-Trace 的 IP 地址,我們可以通過這個地址打開 RT-Trace 的網頁,我們的大部分操作目前也會通過這個網頁來進行:
可以看到當前版本的頁面顯示,主頁很簡潔直接,把主要功能都列舉出來了,并且還配備了操作手冊。左側是功能板塊,既然叫 RT-Trace,那必然要測其 Trace 功能,所以會涉及到 Trace Config(跟蹤配置)及 Trace Viewer(跟蹤分析面板)。當然在此之前先得把程序下進板子里,順便把最基本的程序下載與調試功能測了。
這里測試代碼使用的是 RT-Thread BSP 中的初始例程,芯片是 STM32F4,并且考慮到大家更多還是用 KEIL 進行開發,因此本次測試也會基于 KEIL 來進行。首先打開 KEIL 工程,配置其下載接口為 CMSIS-DAP Debugger:
進入到 Settings 界面,可以看到下載器識別沒有任何問題,并且由于官方稱調試速率最高能達到 20M,我們就在這里設置為 KEIL 目前能支持的最高速率 10M:
確認設置后發現 RT-Trace 的屏幕上也正確顯示了我們剛才配置的調試參數:
編譯下載:
沒有任何問題,程序已經下載到開發板中并且 LED 也正常閃爍,我們設置斷點看看調試功能:
可以看到調試功能也是一切正常!最為一個下載器/調試器,RT-Trace 可以說初步過關了,但是,我們花這個錢可不僅僅是買一個普通的調試器,因此接下來的才是重頭戲和核心功能 —— Trace !這里補充說明一下,Trace 功能需要額外接一個 SWO 引腳,否則只能進行正常的下載調試。
首先看下初始例程的運行邏輯:
int?main(void)
{/* set LED0 pin mode to output */rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);while?(1){rt_pin_write(LED0_PIN, PIN_HIGH);rt_thread_mdelay(500);rt_pin_write(LED0_PIN, PIN_LOW);rt_thread_mdelay(500);}
}
很簡單,就是主函數中運行了一個 LED 閃爍,間隔 500ms,我們接下來就看看 RT-Trace 帶給我們的跟蹤體驗到底是什么樣的,我們能從中看到什么信息。
根據官方手冊,使用 Trace 功能前先要配置一下。于是我們打開網頁進入 Trace Config 頁面先進行 Trace 功能的配置:
依次按照圖中的 1234 順序進行點擊,第二項和第三項無需我們自己填入,直接點自動探測即可。不過目前版本下我發現有概率會探測到的與實際不匹配,此時再點擊一次即可,不行可以多點幾次,相信官方后期會對其進行改善。最后點擊提交配置后下方顯示 OK 說明配置成功。此時我們點擊左側 Trace Viewer 進入跟蹤頁面:
這里會打開一個新的頁面,通過其左側的 UI 可以看出,其能夠通過開始錄制進行實時分析,也能根據歷史文件進行分析,我們由于第一次使用,就直接開始錄制:
此時會出現一個進度條,我推測應該是一次錄制有時間上限,你可以等待其達到最大錄制時間自己結束,也可以中途手動終止。我這邊等其自行結束后發現左側多了三個文件,并且文件名旁邊有刪除和下載按鈕,也印證了 Trace 文件能夠保存下來供后續再次分析:
根據其命名可以看出,單個 Trace 文件的時長是 4 秒,這也不難理解,由于 Trace 功能會記錄每一次中斷、線程切換等信息,而我們的主頻通常高達幾十到上百兆,即便是 1 秒,其數據量也是非常龐大的,如果記錄時間過長勢必會造成瀏覽器的卡頓,因此通過這種時間片的切割來增強流暢度提高體驗感是沒毛病的。這里我們隨意點一個文件進行查看:
果然,RT-Trace 將每一次的中斷以及這段時間內的線程切換情況都記錄了下來,根據之前的代碼,我們的初始例程就一個 main 線程以及默認都會存在的空閑線程 idle,線程的切換是基于 SysTick 以及 PendSV 中斷,這里也都顯示出來了!
通過拖拽時間軸最左側與最右側的定位塊可以對跟蹤周期進行縮放,從而看到短時間內的詳細運行流程:
當然這里要吐槽下目前版本這個很不明顯,我找了好久才發現這里有兩個豎條,一開始還以為暫時還沒做縮放功能,推薦可以在鼠標滑倒時間軸區域的時候給個提示或者增強豎條的顯示效果。縮放后如下:
可以看到縮放到非常小區域的時候,我們就能看清 CPU 的全部運行流程了,試問如果你都能毫不遺漏地捕捉到 CPU 的全部運行軌跡,還怕定位不到 BUG ?這就是 Trace 的強大之處!
此外,通過鼠標在 Global Track Events 事件欄中的點擊加拖動,還能測量指定區間的運行時間:
這里我測的是兩次 SysTick 中間的間隔,在時間軸上的體現為 999us758ns,而我們都知道默認的 SysTick 就是 1ms 一次中斷,其測量精度也是非常高!這里也給官方提個建議,就是時間軸的縮放目前是用鼠標進行拖動,而我們要想看清 CPU 的運行軌跡就必須要拖得很小,這個操作是比較難控制的,希望能加入鼠標滾輪縮放的功能,就完美了!
總體而言,第一次使用 Trace 的我還是被震驚到了,從前我們調試程序要么就是打斷點,這無疑會打斷程序的正常運行,在一些特殊場景如電機控制,這種調試方法不僅存在無法找到問題的可能,還有很大概率會炸機;還有一種就是 print 大法,但這種方式一旦你的輸出頻率過高,滿屏的文字會讓你很難抓到重點信息,而如果頻率設置的太低又可能無法獲取到足夠的有效數據來分析。并且無論上面哪種方式,都是會對程序的運行造成影響,而 Trace 無需中斷程序運行,也無需加入任何調試代碼,通過芯片自身的硬件追蹤單元實現指令級的運行數據捕捉與呈現。至此,相信無需再有更多的描述,一個嵌入式工程師也應該能體會到其對于日常調試的幫助有多大!
以上就是本次測試的全部內容,但這也僅僅是這個系列的開端,后續隨著 RT-Trace 的不斷優化與迭代,我也會跟進并分享更多的使用方法與技巧。誠然現在的 RT-Trace 還有很多功能需要完善,但這也意味著其未來具有無限的可能性。可能目前來看,標題的國產嵌入式調試器之光對于很多人來說有點夸大了,但說其是星星之火完全不足為過,也期望與 RT-Trace 共同成長,見證其燎原之光,能最終驅散每一個嵌入式工程師調試中的迷茫!
國產嵌入式調試器之光? RT-Trace 初體驗!