使用gdb+gdbserver除錯嵌入式程式
阿新 • • 發佈:2019-02-14
gdb+gdbserver 除錯嵌入式程式的例子
如果環境沒有提供交叉編譯程式gdbserver ,
可以參考交叉編譯步驟
1.arm 上的一個程式monitorAll
是我除錯的例子, 它在客戶端的執行命令如下.
./monitorAll -qws -font wenquanyi
2.用gdbserver 除錯的步驟:
1.target 端:
gdbserver –multi 192.168.1.101:1234
啟動gdbserver, 監聽192.168.1.101:1234埠. 支援除錯多個程序
- 192.168.1.101 —> 主機host的IP地址
- 1234 —>target端開放的服務埠, 將來由主機端連線進來
2.host 端:
. debug.sh
把指令碼補充完全,如下:
2.1. debug.sh 的寫法:
#!/bin/bash
arm-linux-gnueabihf-gdb -x gdbinit
gdbinit 是gdb啟動後執行的指令碼檔案
2.2. gdbinit 的寫法
target extended-remote 192.168.1.136:1234
file monitorAll
set args -qws -font wenquanyi
b main
r
-192.168.1.136:1234 —>目標機的IP地址和埠
3.更進一步
target 的上的可執行檔名稱可以和host上的不一樣.
target 上可以執行去除符號的程式,而host上除錯帶debug資訊的程式,這樣可以大大減小 target上的程式大小, 這樣需要在host端設定一下target端的執行程式名稱. 用set remote exec-file
命令
完整指令碼如下例: gdbinit 檔案
target extended-remote 192.168.1.136:1234
file monitorAll_debug
set remote exec-file monitorAll
set args -qws -font wenquanyi
b main
r
- 192.168.1.136 客戶端IP
- 1234 使用的埠
- monitorAll_debug —>host端帶除錯資訊的程式
- monitorAll —>target端被除錯程式(可以不帶debug資訊)
4.再進一步
gdb 的前端可以使用vim, 可參考vim做除錯前端
也可以使用emacs, 前端除錯環境建立請自行baidu.
也可以使用其它前端例如ddd之類的等.
注意對應的gdb除錯程式需要用update-alternatives調整正確.