方法論
當我們遇到問題,應該怎么辦?這不僅應用于程式開發,也是我們在生活中遇到問題的時候,應該想的事兒,怎么辦!趁著此次機會,我好好想了七秒鐘,
- 先問是不是問題,如果不是就不用解決了
- 如果確實是問題,那就得先找到問題出現位置,也就是定位問題,怎么定位呢?縮小問題范圍是一個辦法
- 定位問題后,就得分析問題
- 最后,解決問題
也就是:問題->定位->分析->解決,我覺得吧,這些步驟,在程式開發中得除錯,也是非常有趣的實踐方法,
程式開發除錯
軟體開發程序中,總是經常出現不如意的結果,這個時候就要除錯, 并且除錯在軟體生命周期中,會占用大量的時間,擁有非常大的時間跨度,
出現問題的現象很多,出現的階段和種類也很多,比如編譯階段出錯了,這時候就看編譯報錯資訊就好了,這種錯誤一般容易解決,軟體運行階段例外了,這時候就需要尋找問題了,
可以通過點燈或者列印確定程式執行流程,得出執行在哪一部分出問題了,
可以通過列印變數等,來查看自己懷疑的點,以上都是比較簡單的除錯方法,
更多時候,我們更愿意使用除錯工具,比如keil除錯,gdb除錯,jlink除錯,可以查看執行流程,函式呼叫關系,堆疊資訊,全域變數等,
OneOS與除錯
上述說明了常見的除錯,對OneOS專有的除錯組件產生了很多好奇,畢竟除錯占據了開發者大量的時間,如果有好的工具能極大地減少除錯時間,那可真是太美妙了,
在OneOS有寫道:提供控制臺除錯功能、查看系統狀態功能,可幫助開發者進行故障定位,目前包括日志系統組件、shell控制臺互動組件以及常用的故障定位組件,
控制臺除錯功能
先學習下控制臺除錯,其實就是shell命令列工具,提供了一套供用戶在命令列呼叫的操作介面,主要用于除錯或查看系統資訊,在控制終端輸入命令,控制終端通過某個通道(例如串口)將命令傳給設備里的shell,shell會讀取設備輸入命令,決議并自動掃描內部函式表,尋找對應函式名,執行函式后輸出回應,回應通過原路回傳,將結果顯示在控制終端上,
提供了很多的命令來查看系統資訊,比如記憶體占用,任務資訊,堆疊是否溢位等,
DLOG 日志系統
日志(log)是對發生某個事件的記錄,并進行顯示或者保存到檔案,其實就是列印資訊啦,但做了更多的封裝,更多的功能,
支持 4 個等級,優先級由高到低 DLOG_ERROR DLOG_WARNING DLOG_INFO DLOG_DEBUG,更低的等級,可顯示更多的資訊,
這個日志系統,挺有趣的,如果出現問題了,我可能首先會選擇使用shell命令列工具,以及把DLOG日志系統調整為DLOG_DEBUG,
eCoreDump組件
eCoreDump組件實作了嵌入式系統的coredump功能,記錄當前程式的狀態并打包成elf格式的corefile,可以配合gdb離線決議呼叫堆疊,查看臨時變數,
感覺是對coredump做了整理和移植到OneOS上去了,這個除錯功能可能不是開發階段使用,而是部署軟體后的使用,當在運行期間出現問題了,會生成eCoreDump檔案,并保存在檔案系統中,等到開發者從檔案系統中拿出來,然后配合gdb來除錯分析錯誤原因,
記憶體監測
通過呼叫mem_monitor_auto_init初始化自動監測,制定必要的記憶體地址,大小,檢測方法,hash函式,以及回呼,開始了自動監測,檢測點是在任務切換中檢測,看是否任務對此記憶體是否修改過,
有點意思噢,針對踩記憶體的問題,相信非常有用,
堆疊回溯
在系統運行或除錯程序中,程式總是出現一些出乎意料的現象(例如程式例外或者某個任務運行不是預料的),為了幫助用戶快速定位問題,解決用戶定位問題難,在作業系統中添加了堆疊回溯功能,
堆疊中保存著函式的回傳地址、區域變數等,那么我們可以從這些回傳地址來確定函式的呼叫關系、呼叫順序,我們通過堆疊回溯可以查看當前的背景關系,
結尾
以上就是OneOS下除錯支持的幾種方式,通過menuconfig進行配置,我覺得自己受益良多,您呢?
(Top) → Components→ Diagnose Configuration
[ ] Stack back trace enable
[ ] Monitor CPU usage
[ ] Enable wireshark dump
eCoreDump --->
Memory Monitor --->
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/498735.html
標籤:其他
上一篇:七下期末考試(英語)押題作文
下一篇:單片機遙控開關mos管
