前言
我們已經使用renode仿真開發OneOS-Lite物聯網作業系統,并使用模擬出的串口,輸出了Hello OneOS-Lite,而想要更深入地了解系統的執行流程,或者解決程式的bug,擁有除錯的手段,必不可少!
本篇文章將從除錯的角度出發,基于Renode,使用gdb除錯OneOS-Lite物聯網作業系統,通過除錯OneOS-Lite,也可以更加直白地了解她,
renode除錯支持
Renode支持使用 GDB 除錯在仿真機器上運行的應用程式,
它使用 GDB 遠程協議,并支持使用最常見的 GDB 函式,如斷點,觀察點,單步,記憶體訪問等,
在真實硬體上除錯最重要的區別是:當仿真的CPU停止時,虛擬時間不會進展,這使得除錯程序對于仿真機器來說是透明的,
編譯程式
首先,當然是編譯程式,這里我們使用的是OneOS-Lite下的STM32F407VG-renode專案,進入該專案中,編譯生成elf檔案,
建議克隆原始碼倉庫https://gitee.com/cmcc-oneos/OneOS-Lite,體驗嘗試,

創建仿真
在文章《使用renode仿真開發OneOS-Lite物聯網作業系統》,我們已經實戰操作過如何進行仿真的全程序,為了簡化操作,我們已經把步驟寫成了腳本檔案stm32f4_discovery.resc,放在STM32F407VG-renode專案中,
使用以下命令:
include @D:\gitee\OneOS-Lite\projects\STM32F407VG-renode\stm32f4_discovery.resc

連接gdb
在renode監視器中運行以下指令,我們可以在埠 3333 上啟動 GDB 服務器:
(machine-0) machine StartGdbServer 3333

我們可以自行選擇適當的工具鏈啟動 GDB,并連接到遠程目標(這里我們選擇的是CUBE工具自帶的GDB除錯程式):
$ arm-none-eabi-gdb /path/to/application.elf
(gdb) target remote :3333
在elf程式的目錄下,執行以上命令(這樣可以免除路徑的煩惱):

開始除錯
GDB 連接到renode后,仿真就可以開始了,僅僅告訴 GDB 繼續,并不足以啟動程式,這是我們還要告訴renode監視器,才能得以除錯繼續,
(gdb) monitor start
(gdb) continue
在此之后,我們就可以像正常使用gdb除錯程式的樣子,單步、斷點、查看堆疊層次等等,

關注&&聯系
gitee: https://gitee.com/cmcc-oneos/OneOS-Lite
docs: https://oneos-lite.com/
公眾號:CMCC-OneOS
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317658.html
標籤:其他
