前言:android開發時,有了adb,就能在pc shell或者eclispe debug視窗看到除錯資訊從而定位bug。android系統提供的除錯手段很強大,linux也是,但是對沒有移植這些成熟的嵌入式系統開發板來說,實現嵌入式系統的除錯,從工具到方式,都需要自己動手搭建。一套除錯環境包括:
核心執行產生的資訊,通過printf函式輸出到乙個虛擬檔案,再通過讀取檔案獲得這些資訊。所以檔案讀寫,就是嵌入式系統除錯的「傳送門」。但檔案讀寫必然會降低速度,影響核心和驅動效能。因此,程式裡的print都會通過#if
,#endif
在編譯時判斷生成的是debug版本,還是release版本。通常,printf除錯資訊時還會附加上時間,程序,執行緒,優先順序等附加資訊便於分析。在核心中實現print函式時,也#define
了log的優先順序 。
檔案讀寫只是最簡單最基本的除錯手段,而像android的adb,linux的gadb,還能夠實現斷點、單步跟蹤、堆疊分析、cpu效能分析等功能。只是這種強大的除錯工具開發起來,也就不僅僅是向記憶體中讀寫檔案,巨集定義幾個優先順序就可以實現的。參考[5]中簡單介紹了兩種成熟的除錯方案設計的方式,涉及硬體除錯電路的設計和外接輔助除錯裝置。但無論adb還是gadb,都是從三個角度設計:
pc上通過adb跟蹤除錯
嵌入式上執行adbserver
adb和adbserver有規範的通訊協議,通訊方式可以選擇無線或有線
對於實施嵌入式作業系統,因為中斷和任務搶占機制,單步、斷點等方式是行不通的,會影響到其它現成正常執行的訊號量。除錯需要頻繁修改,編譯程式。乙個大點的工程編譯、燒錄到flash會耗費老多時間。原始除錯方式降低30%生產力。
參考[4]中介紹了6種嵌入式(手機、平板)除錯的手段,其中控制台資訊重定向(到檔案),uart+securecrt,adb(usb或wifi)都是我常用的。然而,還可以通過jtag+trace32直接檢視暫存器或記憶體,dump整個記憶體+trace32…
如果linux下有gdb這樣的除錯工具,rtos上一定也存在,找到這樣的開源庫,交叉編譯得到可以在開發板上執行的除錯工具(除非記憶體和flash充足)
可以將類似的gdb,gdbserver分開
[1]. 嵌入式linux的除錯技術
[2]. 說說嵌入式除錯方式
[3]. 嵌入式開發除錯方法
[4]. 嵌入式除錯手段
[5]. ibm developer: 嵌入式系統的除錯
嵌入式系統 GDB除錯
心得體會 gdb gdb全稱 gnu debugger,是gnu工程為gnu作業系統開發的偵錯程式。它可以用於除錯c c objective c pascal ada等語言編寫的程式。被除錯的程式可以跟gdb執行於同一臺電腦,也可執行於不同電腦。file 裝入想要除錯的可執行檔案 kill 終止正在...
嵌入式gdb gdbserver除錯
在很多情況下,需要對應用程式進行除錯。在 linux 下除錯程式,常用的工具是 gdb。由於嵌入式單板的資源有限,一般不直接在目標機上執行 gdb 進行除錯,而是採取 gdb gdbserver 的方式。gdbserver 在目標機中執行,gdb 則在宿主機上執行。根檔案系 統中已經包含 gdbse...
嵌入式除錯技術
嵌入式除錯方法 1.模擬器。比如qtopia core可以用奇趣提供的frame buffer模擬工具qvfb,arm硬體模擬可以用skyeye開源專案。2.遠端除錯。偵錯程式還在pc上,偵錯程式與被除錯的程式通過網路通訊。3.通過log和core dump等檔案事後分析。stdprm標準印表機lp...