Ozone是一個跨平臺支持的代碼調(diào)試軟件,支持J-link和J-Trace調(diào)試器。可以加載SES、Keil、GCC、clang/LLVM等工具鏈編譯生成的Elf/Dwarf可執(zhí)行文件,進行C/C++源碼調(diào)試和匯編指令調(diào)試。
Ozone新版本中增加了調(diào)試快照特性,可以保存整個系統(tǒng)狀態(tài),包括RAM、Flash、CPU寄存器、選定的外設(shè)、時間軸、代碼概要(執(zhí)行計數(shù)器)、數(shù)據(jù)圖、功率圖、終端日志、控制臺日志等信息。
后續(xù)加載快照時,所有調(diào)試窗口展示快照創(chuàng)建時所顯示的信息,包括調(diào)用棧call stack、符號、任務(wù)、內(nèi)存和寄存器窗口。
高級目標(biāo)系統(tǒng)狀態(tài),如時鐘、IRQ和外設(shè)配置,可以精確地從快照中恢復(fù)。這意味著即使是復(fù)雜的多任務(wù)程序和帶有外設(shè)IO的程序也可以從快照點恢復(fù)。
快照可以在目標(biāo)離線模式下加載和觀察。這意味著加載快照時不需要硬件,甚至不需要J-Link或J-Trace。
保存快照
通過快照對話框用戶可以定義將哪些數(shù)據(jù)保存到快照中。該對話框提供了兩個子對話框,允許定義組件的系統(tǒng)狀態(tài),即哪些內(nèi)存區(qū)域,CPU,浮點和外設(shè)寄存器要保存。可以從Debug菜單或通過執(zhí)行命令Debug.SaveSnapshot訪問該對話框。
寄存器選擇對話框的默認配置,以及存儲到快照的默認目標(biāo)寄存器集包含:所有基本的CPU寄存器,及FP寄存器。
內(nèi)存選擇對話框的默認配置,以及存儲到快照的默認目標(biāo)內(nèi)存區(qū)域包括:在J-Link API的MCU數(shù)據(jù)庫中為目標(biāo)定義的FLASH和RAM區(qū)域;設(shè)置了可分配標(biāo)志(A)的ELF程序數(shù)據(jù)段。
可以通過單擊Restore Defaults按鈕來恢復(fù)這些默認配置。Import按鈕導(dǎo)入允許從SEGGER Embedded Studio內(nèi)存映射文件中添加內(nèi)存區(qū)域。Save to Project按鈕將當(dāng)前配置保存到項目的用戶文件(jdebug.user)中。快照使用SEGGER的emCompress軟件庫進行壓縮,磁盤格式是內(nèi)部文檔。
加載快照
可以從Debug菜單或通過執(zhí)行命令Debug .LoadSnapshot訪問加載快照對話框。
在加載快照之前,用戶必須確保:
選擇與快照目標(biāo)設(shè)備匹配的目標(biāo)設(shè)備
加載與保存快照時的程序映像相匹配的程序文件。
選擇與快照跟蹤源匹配的跟蹤源。
圖形化表達式列表與拍攝快照時的表達式列表相匹配。
當(dāng)上述任何條件不適用時,將彈出一個警告對話框:
確保上述前提條件的一種簡單方法是在打開用于創(chuàng)建快照的工程文件后加載快照。
系統(tǒng)恢復(fù)順序
加載快照時,將按照它們在快照中出現(xiàn)的順序恢復(fù)寄存器和內(nèi)存區(qū)域。這個順序與內(nèi)存和寄存器選擇對話框顯示的順序相同。當(dāng)以目標(biāo)在線模式加載快照時,非基本CPU寄存器不會立即寫入目標(biāo)。用戶必須對系統(tǒng)、外設(shè)和內(nèi)存映射寄存器應(yīng)用于目標(biāo)的具體方式進行編程。
快照編程
為了從快照中恢復(fù)高級系統(tǒng)狀態(tài),例如(時鐘)外設(shè),用戶通常需要對恢復(fù)操作的精確順序進行編程。為了支持這一點,Ozone提供了腳本函數(shù)OnSnapshotSave和OnSnapshotLoad和一個命令組Snapshot定制快照文件的讀取和寫入。
/********************************************************************* * SNAPSHOT_Restore_System_Generic * Function description * Loads and applies generic system state from a snapshot * Return Value * 0: OK * -1: error * Notes * (1) User function ***********************************************************************/ void OnSnapshotSave (void) { Util.Log("OnSnapshotSave: saving system state..."); // // Save Cortex-M specific system state // Snapshot.SaveReg("CPU.Peripherals.SCB.VTOR"); // Vector table offset register Snapshot.SaveReg("CPU.Peripherals.DWT.DWT_CTRL"); // DWT unit status & control register (SYSTEMVIEW) Snapshot.SaveReg("CPU.Peripherals.SYSTICK"); // System timer configuration (SYSTICK) Snapshot.SaveReg("CPU.Peripherals.SCB.SHPR3"); // Cortex-M IRQ priorties 12-15 (SYSTICK) Snapshot.SaveReg("CPU.Peripherals.SCB.CPACR"); // FPU and coprocessor control register // // Save system clock configuration // Snapshot.SaveReg("Peripherals.RCC.CR"); Snapshot.SaveReg("Peripherals.RCC.CFGR"); Snapshot.SaveReg("Peripherals.RCC.PLLCFGR"); // // Save FLASH configuration // Snapshot.SaveReg("Peripherals.FLASH.ACR"); // // Save LED configuration // Snapshot.SaveReg("Peripherals.RCC.AHB1RSTR"); // LED port reset register Snapshot.SaveReg("Peripherals.RCC.AHB1ENR"); // LED port clock enable register Snapshot.SaveReg("Peripherals.GPIO.GPIOA.MODER"); // LED port mode register Snapshot.SaveReg("Peripherals.GPIO.GPIOA.ODR"); // LED port output data register // // Power configuration // Snapshot.SaveReg("Peripherals.PWR.CR"); // // APB1 clock // Snapshot.SaveReg("Peripherals.RCC.APB1ENR"); Util.Log("OnSnapshotSave: system state saved."); } /********************************************************************* * OnSnapshotLoad * Function description * Optional event handler, called upon loading a snapshot. * Additional information * This function is used to restore the target state in cases * where values cannot simply be written to the target. * Typical use: GPIO clock needs to be enabled, before * GPIO is configured. ***********************************************************************/ void OnSnapshotLoad (void) { Util.Log("OnSnapshotLoad: restoring system state..."); if (SNAPSHOT_Restore_System_Generic() != 0) { Util.Log("OnSnapshotLoad : failed to restore generic system state"); return 0; } if (SNAPSHOT_Restore_SysClock() != 0) { Util.Log("OnSnapshotLoad : failed to resore clock-specific system state"); return 0; } if (SNAPSHOT_Restore_OS() != 0) { Util.Log("OnSnapshotLoad : failed to restore OS-specific system state"); return 0; } if (SNAPSHOT_Restore_Board() != 0) { Util.Log("OnSnapshotLoad : failed to restore board-specific system state"); return 0; } Util.Log("OnSnapshotLoad: system state restored."); }
快照腳本功能目前僅針對系統(tǒng)寄存器狀態(tài)。當(dāng)快照以在線模式加載時,CPU寄存器和內(nèi)存數(shù)據(jù)自動寫入目標(biāo),不依賴于腳本函數(shù)OnSnapshotLoad。更多可以在腳本函數(shù)OnSnapshotLoad和OnSnapshotSave中使用調(diào)試命令,可以參考Ozone用戶手冊。
快照存儲不能以用戶可讀的格式輕松有效地存儲的二進制調(diào)試會話數(shù)據(jù)。快照的典型應(yīng)用場景如下:
快照允許客戶脫離調(diào)試會話,并能夠在稍后的時間點恢復(fù)會話。
快照允許更容易地重現(xiàn)和分析錯誤,可以由不同主機上的多方進行。
快照提高Ozone的教學(xué)和演示能力,用于培訓(xùn)課程和會議。
快照作為存檔。
快照功能目前僅支持Cortex-M架構(gòu)處理器。
-
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120001 -
軟件
+關(guān)注
關(guān)注
69文章
4770瀏覽量
87156 -
C++
+關(guān)注
關(guān)注
22文章
2104瀏覽量
73487 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
300瀏覽量
23689
原文標(biāo)題:如何使用Ozone的快照功能
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論