1. 程式人生 > >使用gdb+gdbserver除錯嵌入式程式

使用gdb+gdbserver除錯嵌入式程式

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調整正確.