嵌入式開發常用的調試手段有哪幾種?簡述它們各自的優缺點?
時間:2023-09-11 來源:華清遠見
嵌入式開發常用的調試手段有哪幾種?簡述它們各自的優缺點?
1、LOG
我在實際工作中,log打印調試解決了我大多數的問題,一般的問題,通過分析log都可以定位出問題所在。
log的格式:
帶時間戳、函數名、行號等有助于分析問題的信息。
<xxx ms>[func:100]
實際中可能不只包含如上信息,根據需要添加,在一些判斷分支要加上log,這樣可以清楚地知道程序跑到分支判斷時的執行流程。在一些大的操作的開始處,加上顯眼的log,可以清楚地知道某個操作開始的地方。業務邏輯模塊,可以加上特定的標簽。比如統一的log的格式中加上特定標簽,比如BUSINESS。如:<xxx ms>[BUSINESS][func:100]
缺點:
我們看log的時候,通過編輯器搜索關鍵字 BUSINESS 就可以只列出業務邏輯相關的log,我們只要看這些log,就可以大致知道程序的運行流程。當然,其它模塊也可以根據需要加上標簽。與數據打交道的模塊可能需要打印一些數據來分析源數據是否正常。可以稍微的控制打印頻率,盡可能在不影響數據分析的情況下打印盡可能少的log。否則,一些log的文件動不動就幾百MB,分析起來也很頭疼。特別的,log需要保存在flash上時,為了防止log爆滿flash,常常需要限制log文件的大小并做log滾動覆蓋,這時候無效log太多了可能就會覆蓋掉有效的log。
優點:可以打印輸出出代碼完整流程中數據的變化。不限制編譯器種類,只要能輸出,就可以打印log,很方便。
2、GDB調試
GDB 全稱 "GNU symbolic debugger”,從名稱上不難看出,它誕生于GNU計劃(同時誕生 的還有GCC、Emacs等),是Linux下常用的程序調試器。發展至今,GDB已經迭代了諸多個版本,當下的GDB支持調試多種編程語言編寫的程序,包括C、C++、Go、Objective—C、
OpenCL、Ada等。實際場景中,GDB更常用來調試C和C++程序。一般來說,GDB主要幫助我們完成以下四個方面的功能:
1.啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。
2.在某個指定的地方或條件下暫停程序。
3.當程序被停住時,可以檢查此時你的程序中所發生的事。
4.在程序執行過程中修改程序中的變量或條件,將一個bug產生的影響修正從而測試其他bug。
使用GDB調試程序,有以下兩點需要注意:
1.要使用GDB調試某個程序,該程序編譯時必須加上編譯選項—g,否則該程序是不包含調試信息的;
2.GCC編譯器支持 —o和—g 一起參與編譯。
缺點:
開銷大,效率低。
優點:
資源占用小,速度快,多程序同步調不會產生沖突
3、JTAG 調試
基于JTAG(Joint test action group)的調試方法是ARM 系統調試的最常用方法,因為ARM 處理器中集成了JTAG 調試模塊。調試主機上必須安裝的工具包括程序編輯和編譯系統、調試器和程序所涉及的庫文件。目標板必須含有J ,I'AG 接口。在調試主機和目標板之間有一個協議轉換模塊,一般稱為調試代理,其作用主要有兩個:一個是在調試主機和目標板之間進行協議轉換;另一個是進行接口轉換,目標板的一端是標準的JTAG 接口,而調試主機一端可能是RS 一232 串口。也可能是并口或是USB 接口等。調試系統結構如圖3 所示。JTAC 仿真器比較便宜,比較方便,通過現有的JTAG 邊界掃描口與ARM 處理器核通信,屬于完全非插入式(即不使用片上資源)調試,它不需要目標存儲器的干預。也不占用目標板上的任何端口,而這些條件是駐留監控軟件所必須的。另外。因為ⅡAG調試的程序是在目標板上執行的,仿真效果更接近于目標硬件,因此,對于一些高頻的操作限制、接口操作問題、AC(交流)和DC(直流)參數不匹配。電線長度的限制等被最小化了。我們使用集成開發環境配合JTAG仿真器進行開發是目前最流行的一種調試方式.它的優點是方便、無需任何監控程序,軟件硬件均可調試,可以重復利用JTAG 硬件測試接口,可以在RAM中設置斷點外,還可以在ROM 中設置斷點。
缺點:
僅適用于有調試接口的芯片。占用引腳數比較多,比較占用板子尺寸。
優點:
不限于ARM內核單片機,還能支持更多單片機程序調試和下載。用途更廣,用于編程,調試和生產測試。

