歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 嵌入式Linux的GDB遠程調試的實現

嵌入式Linux的GDB遠程調試的實現

日期:2017/3/1 11:15:32   编辑:Linux編程
遠程調試環境由宿主機GDB和目標機調試stub共同構成,兩者通過串口或TCP連接。使用GDB標准遠程串行協議協同工作,實現對目標機上的系統內核和上層應用的監控和調試功能。調試stub是嵌入式系統中的一段代碼,作為宿主機GDB和目標機調試程序間的一個媒介而存在。就目前而言,嵌入式Linux系統中,主要有三種遠程調試方法,分別適用於不同場合的調試工作:

用ROM Monitor調試目標機程序

用KGDB調試系統內核

用gdbserver調試用戶空間程序

這三種調試方法的區別主要在於:目標機遠程調試stub的存在形式的不同,而其設計思路和實現方法則是大致相同的,而我們最常用的是調試應用程序,就是采用gdb+gdbserver的方式進行調試。在很多情況下,用戶需要對一個應用程序進行反復調試,特別是復雜的程序,采用GDB方法調試,由於嵌入式系統資源有限性,一般不能直接在目標系統上進行調試,通常采gdb+gdbserver的方式進行調試。Gdbserver在目標系統中運行,gdb則在宿主機上運行

要進行GDB調試,目標系統必須包括gdbserver程序,宿主機也必須安裝gdb程序,一般linux發行版中都有一個可以運行的gdb,但開發人員不能直接使用該發行版中的gdb來做遠程調試,而要獲取gdb的源代碼包,針對arm平台作一個簡單配置,重新編譯得到相應gdb。

gdb的源代碼包可以從http://ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下載,最新版本為gdb-7.3,或者從以下地址下載:

下載在Linux公社的1號FTP服務器裡,下載地址:

FTP地址:ftp://www.linuxidc.com

用戶名:www.linuxidc.com

密碼:www.muu.cc

在 2011年LinuxIDC.com\10月\嵌入式Linux的GDB遠程調試的實現

下載方法見 http://www.linuxidc.net/thread-1187-1-1.html


一.編譯安裝arm-linux-gdb

<1>#tar jxvf gdb-7.3.tar.bz2

<2>#cd gdb-7.3

<3>#./configure--target=arm-linux --enable-sim --prefix=/usr/local/bin

<4>#make

<5>#make install


二.編譯安裝gdbserver

<1>#cd gdb-7.3/gdb/gdbserver

<2>#./configure --target=arm-linux--host=arm-linux

<3>#make

這樣在gdb-7.3/gdb/gdbserver目錄下就生成了一個gdbserver可執行文件,拷貝到目標開發板上.


三.測試arm-linux-gdb + gdbserver

<1>在超級終端輸入:

#./gdbserver 192.168.100.1:2345 hello

[192.168.100.1為pc機ip地址,2345為監聽端口,hello為待調試程序


這樣在開發板上可以看到如下提示信息:
Process wpa_cli created; pid = 730
Listening on port 2345

表示gdbserver 成功運行等待客戶端的連接信息


<2>在pc機上輸入:

#arm-linux-gdb hello

然後在GDB界面輸入:

#target remote 192.168.100.2:2345

[192.168.100.2為開發板ip地址,2345為開發版監聽端口]


這樣在開發板上可以看到如下提示信息:
Remote debugging from host 192.168.100.1

表示gdbserver成功運行並且建立連接關系,等待客戶端的調試信息


四、(arm-linux-gdb+ gdbserver) 具體實例:

pc端使用arm-linux-gdb 或 arm-linux-gdbtui簡易圖形gdb終端

〈1〉PC端:

#arm-linux-gdb hello //字符界面調試環境

例:

(gdb) b main

Breakpoint1 at 0x835c: file hello.c,line 6.
(gdb) l

字符界面:根PC本地GDB一樣,用起來挺費勁的,呵呵

#arm-linux-gdbtui hello //簡易圖形界面調試環境

簡易圖形界面:用起來還是比較方便的,呵呵

(gdb) c不要輸入r,輸入c,因為target端的hello在載入時處於了run狀態.

Continuing.

Breakpoint 1, main (argc=1,argv=0xbeb4ad84) at hello.c:6


6 for(i = 0;i < 10;i++)
(gdb) n
8 printf("%d\n", i);
(gdb) n
6 for(i = 0;i < 10;i++)
(gdb) n
8 printf("%d\n",i);
(gdb)

<2> target板端log信息
====================================================================================
/ # ./gdbserver 192.168.100.1:2345 hello
[ 3688.476398] init: untracked pid 1513 exited
Process hello created; pid = 1514
Listening on port 2345
Remote debugging from host 192.168.100.1
====================================================================================

Copyright © Linux教程網 All Rights Reserved