概述
AliOS Things 調試診斷(debug)組件支持以下功能:
異常管理,在系統異常后接管異常,并輸出系統快照coredump信息
提供常見的系統調試診斷接口;
提供常見的CLI調試命令(可輸入help查看),如:
cpuusage: 查詢cpu利用率
tasklist: 查詢系統任務狀態
dumpsys mm: 查詢系統內存使用狀態
debug:查詢系統內存/任務/隊列/信號量/互斥鎖等使用狀態
p: 查詢內存值
m: 改寫內存值
版權信息
Apache license v2.0
目錄結構
├── include
│ └── aos
│ └── debug.h #維測組件對外頭接口
├── package.yaml
├── README.md
└── src
├── debug_api.h #維測組件內部頭文件
├── debug_backtrace.c #棧回溯
├── debug_backtrace.h
├── debug.c #維測組件對外接口實現
├── debug_cli_cmd.c #調試命令
├── debug_cli_cmd.h
├── debug_cpuusage.c #cpu利用率
├── debug_cpuusage.h
├── debug_dumpsys.c #內存信息查詢
├── debug_dumpsys.h
├── debug_infoget.c #組件內部接口實現
├── debug_infoget.h
├── debug_lastword.c #臨終遺言管理
├── debug_lastword.h
├── debug_overview.c #系統調試信息查詢
├── debug_overview.h
├── debug_panic.c #系統異常coredump
├── debug_panic.h
├── debug_print.c #printk調試打印
├── debug_print.h
├── debug_test.c #一些測試命令
└── debug_test.h
依賴組件
rhino
vfs(lastword功能依賴)
littlefs(lastword功能依賴)
常用配置
系統中相關配置已有默認值,如需修改配置,統一在YAML中def_config節點修改,具體如下:
系統異常后進入調試模式,可繼續執行cli命令,系統不會自動復位(默認模式),可修改YAML配置如下,修改為0后,系統異常則會自動復位。
def_config:
DEBUG_PANIC_CLI: 1
系統異常后,默認不會將ulog緩存里的log輸出,可修改YAML配置如下,修改為1后,會輸出ulog緩存里的log
cpuusage統計結果默認輸出到串口終端,可修改YAML配置如下,修改為1后,會將cpuusage統計結果寫入文件,不在終端輸出
def_config:
DEBUG_CPUUSAGE_RECODE_TO_FILE_ENABLE: 0
#可配置寫入文件的cpuusage的統計任務的最大數量
DEBUG_CPUUSAGE_MAX_TASK: 80
#可配置寫入文件的路徑
DEBUG_CPUUSAGE_FILE_NAME: "/data/cpuusage"
API說明
使用示例
組件使用示例相關的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發工具 alios-studio ,所以首先需要參考《aos-studio使用說明之搭建開發環境》,下載安裝 alios-studio 。 待開發環境搭建完成后,可以按照以下步驟進行示例的測試。
步驟1 創建或打開工程
打開已有工程
如果用于測試的案例工程已存在,可參考《aos-studio使用說明之打開工程》打開已有工程。
創建新的工程
組件的示例代碼可以通過編譯鏈接到AliOS Things的任意案例(solution)來運行,這里選擇helloworld_demo案例。helloworld_demo案例相關的源代碼下載可參考《aos-studio使用說明之創建工程》。
步驟2 添加組件
案例下載完成后,以運行helloworld_demo為例,需要在helloworld_demo組件的package.yaml中添加對組件的依賴:
depends:
- debug: dev_aos # helloworld_demo中引入debug組件
步驟3 下載組件
在已安裝了 alios-studio 的開發環境工具欄中,選擇Terminal -> New Terminal啟動終端,并且默認工作路徑為當前工程的workspace,此時在終端命令行中輸入:
aos install debug
上述命令執行成功后,組件源碼則被下載到了./components/debug路徑中。
步驟5 編譯固件
在示例代碼已經添加至組件的配置文件,并且helloworld_demo已添加了對該組件的依賴后,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《aos-studio使用說明之編譯固件》。
步驟6 燒錄固件
helloworld_demo案例的固件生成后,可參考《aos-studio使用說明之燒錄固件》來燒錄固件。
步驟7 打開串口
固件燒錄完成后,可以通過串口查看示例的運行結果,打開串口的具體方法可參考《aos-studio使用說明之查看日志》。
當串口終端打開成功后,可在串口中輸入help來查看已添加的測試命令。
步驟8 測試示例
CLI命令行輸入:
debug_api help # debug接口測試
關鍵日志:
You can use debug cmd to show api test:
debug_api help --- show this
debug_api 1 --- show memory info
debug_api 2 --- show task info
debug_api 3 --- show bufqueue info
debug_api 4 --- show queue info
debug_api 5 --- show sem info
debug_api 6 --- show mutex info
debug_api 7 --- show backtrace now
debug_api 8 --- show backtrace task
debug_api all --- show all above
接著可根據提示使用debug_api n 進行相應的接口演示,如
CLI命令行輸入:
debug_api 1 # show memory info
關鍵日志:
========== Heap Info ==========
---------------------------------------------------------------------------
[HEAP]| TotalSz | FreeSz | UsedSz | MinFreeSz | MaxFreeBlkSz |
| 0x0067FFF8 | 0x0064D530 | 0x00032AC8 | 0x0064D120 | 0x0064D530 |
---------------------------------------------------------------------------
FAQ
Q1: cpuusage命令的使用說明是什么?
答:
cpuusage [-d n] [-t m] 命令啟動CPU利用率統計,結果輸出到串口終端
其中:-d 選項用于指定統計周期,單位為ms,默認為1 s;
-t 選項用于指定統計時長,單位為ms,默認為連續運行。
舉例說明:
(1) cpuusage -- 啟動一個cpuusage任務,該任務默認每隔1s執行一次統計;
(2) cpuusage -d 3000 -- 啟動一個cpuusage任務,該任務默認每隔3s(3000ms)執行一次統計;
(3) cpuusage -d 2000 -t 10000 -- 啟動一個cpuusage任務,該任務默認每隔2s(2000ms)執行一次統計,統計到10s(10000ms)后停止;
(4) cpuusage -e -- 停止統計
Q2: 查看修改內存p/m命令的使用說明是什么?
答:
查看內存
p addr [數量:默認為16個] [字節寬度顯示,可選1/2/4,默認為4字節]
舉例說明:
p 0x80000000 -- 查看0x80000000處的內存值,默認輸出16個地址,以4字節數據寬度顯示
0x80000000: 80020000 60012ee1 60012f81 60012f87
0x80000010: 60012fa9 60012fb5 60012fc1 00000000
0x80000020: 00000000 00000000 00000000 60013005
0x80000030: 60013005 00000000 60013005 60013005
p 0x80000000 32 -- 查看0x80000000處的內存值,輸出32個地址,以4字節數據寬度顯示
0x80000000: 80020000 60012ee1 60012f81 60012f87
0x80000010: 60012fa9 60012fb5 60012fc1 00000000
0x80000020: 00000000 00000000 00000000 60013005
0x80000030: 60013005 00000000 60013005 60013005
0x80000040: 60008919 600076f1 60008919 600145cd
0x80000050: 60008919 60008919 60008919 60014e65
0x80000060: 60008389 60008919 60014939 60008919
0x80000070: 60008919 60008919 600147fb 60008919
p 0x80000000 32 2 -- 查看0x80000000處的內存值,輸出32個地址,以2字節數據寬度顯示
0x80000000: 0000 8002 2ee1 6001 2f81 6001 2f87 6001
0x80000010: 2fa9 6001 2fb5 6001 2fc1 6001 0000 0000
0x80000020: 0000 0000 0000 0000 0000 0000 3005 6001
0x80000030: 3005 6001 0000 0000 3005 6001 3005 6001
p 0x80000000 32 1 -- 查看0x80000000處的內存值,輸出32個地址,以1字節數據寬度顯示
0x80000000: 00 00 02 80 e1 2e 01 60 81 2f 01 60 87 2f 01 60
0x80000010: a9 2f 01 60 b5 2f 01 60 c1 2f 01 60 00 00 00 00
修改內存
m addr new_value 將addr處的內存值修改為new_value
舉例說明:
m 0x80000000 0x12345678 -- 將0x80000000處的內存值修改為0x12345678
value on 0x80000000 change from 0x80020000 to 0x12345678.
驗證:
p 0x80000000
0x80000000: 12345678 60012ee1 60012f81 60012f87
0x80000010: 60012fa9 60012fb5 60012fc1 00000000
0x80000020: 00000000 00000000 00000000 60013005
0x80000030: 60013005 00000000 60013005 60013005