1. 程式人生 > >嵌入式Linux--配置gdb除錯環境

嵌入式Linux--配置gdb除錯環境

gdb交叉除錯類似於網路瀏覽器,本地PC為客戶端,arm開發板為伺服器端,雙方都要統一編譯工具鏈,版本最好保持一致。
(百度百科)一般來說,GDB主要幫助你完成下面四個方面的功能:
1、啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。
2、可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示式)
3、當程式被停住時,可以檢查此時你的程式中所發生的事。
4、你可以改變你的程式,將一個BUG產生的影響修正從而測試其他BUG。

一、下載原始碼

http://ftp.gnu.org/gnu/gdb/
新的版本對環境的要求要高點,如果出錯了可以嘗試更換舊點的版本,我使用的版本是 gdb-7.8.1.tar.gz。

二、獲取arm-linux-gdb(pc)

arm-linux-gdb屬於除錯程式,主機可以通過執行該程式開啟arm可執行檔案。一開始照著網上的教程來操作,理想情況.configure、make、make install三步到位,實際情況是引數換了好幾組,make始終會報error。他們的思路是通過gdb原始碼配置->編譯->生成arm-linux-gdb,我失敗的原因可能是交叉編譯工具鏈不適合此操作,當我檢視工具鏈的時候,發現工具鏈本身自帶一個arm-linux-gdb程式!那我就沒必要再去自己編譯生成一個了。如果工具鏈沒有這個程式再去考慮編譯安裝,可以參考這篇文章
在這裡插入圖片描述

三、獲取gdbserver(arm)

gdbserver執行在arm開發板中,生成步驟:

cd gdb-7.8.1/gdb/gdbserver/
./configure  --target=arm-linux --host=arm-linux
make CC=arm-linux-gcc

引數含義:

--target 指定了目標機交叉編譯器字首
--host   指定了編譯後的程式需要在哪裡執行
CC=arm-linux-gcc 用來指定交叉編譯工具為arm-linux-gcc,需要根據你自己的來指定。

這個過程一般不會出錯,執行完命令後會在該目錄下生成一個gdbserver

可執行檔案,將該檔案拷貝到開發板的/usr/bin目錄下,方便呼叫。這裡需要注意的是執行gdbserver還需要libthread_db庫,若你自己做的檔案系統內沒有這個庫的話需要將本地交叉編譯工具中的libthread_db*拷貝到開發板的/usr/lib中去。
在這裡插入圖片描述

四、使用方法

4.1 編譯程式

hello.c

#include <stdio.h>

int main()
{
        int i = 1;

        while (i++)
        {
                printf("num is : %d \n", i); 
        }
    
        return 0;
}

Makefile

all:
        arm-linux-gcc -g hello.c -o hello

clean:
        rm hello

arm-linux-gcc -g用於編譯出含有gdb除錯資訊的可執行檔案。

4.2 ARM端開啟gdbserver

ARM端執行如下內容,gdbserver 本地IP+埠號+可執行檔案

gdbserver 192.168.40.178:1111 hello

4.3 PC端連線gdbserver

PC端執行:

arm-linux-gdb ./hello
target remote 192.168.40.178:1111

pc端連線之後,在arm板子這邊可以看到遠端連線資訊。

4.4 gdb除錯

通過簡單的設定斷點、執行來觀察資訊,可以看到已經能夠gdb除錯了。


參考文章: