搭建交叉調試環境 arm-linux-gdb配合gdbserver


    在嵌入式開發中,有時候需要進行源碼級別的調試,可以設置斷點,單步執行,相比於每步打印printf或者printk來說,更加友好。下面就來介紹這種調試方法。

    gdb交叉調試類似於網絡瀏覽器,本地PC為客戶端,遠程開發板為服務器端,雙方都要統一編譯工具鏈,版本最好保持一致。 

   --target 指定了目標機交叉編譯器前綴,比如--target=arm-linux ,缺省值為i386-linux

   --host   指定了編譯后的程序需要在哪里運行, 比如,--host=arm-linux

   --prefix  指定了要安裝的目錄

    因此,在編譯arm-linux-gdb的時候,不需要指定host,因為它是在本地PC上跑的,在編譯gdbserver時,需要指定host為arm-linux,因為,gdbserver是在arm平台上跑的。兩者都需要指定相同的target。

    編譯arm-linux-gdb

    在gdb-7.8的解壓目錄下新建 arm-gdb,用於存放編譯生成文件。

    ./configure --target=arm-linux --prefix=/ -gdb/

     然后make && make install ,就可以在arn-gdb/bin/目錄下面找到arm-linux-gdb,

     如果有需要,可以將此執行路徑加入到系統環境變量中去。

    編譯gdbserver

    在gdb-7.8目錄中,切換到gdb/gdbserver目錄中,

    ./configure  --target=arm-linux  --host=arm-linux

    然后 make CC=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc ,就可以再當前目錄下生成gdbserver。

    這里需要注意的是運行gdbserver還需要libthread_db庫,若你自己做的文件系統內沒有這個庫的話需要將本地交叉編譯工具中的libthread_db*拷貝到開發板中去。

    sudo cp /opt/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/libthread_db* /home/hao/nfs/lib/ –d

    使用-d選項,復制時,連同鏈接關系一起復制過去。

    使用方法

    將生成的gdbserver拷貝到開發板上去,PC機和開發板之間通過nfs文件系統溝通,開發板IP:192.168.0.200,本地主機IP:192.168.0.104

    在本地機器上面,用arm-linux-gcc –g 編譯一個應用程序,在開發板上,執行

    image

    gpbserver使用方法: gpbserver 開發板ip地址:通信端口(隨意取) 要調試的程序 【程序的命令行參數】

    然后在本地機器上面,啟動arm-linux-gdb,操作如下:

   image

    連接成功后,開發板上會顯示:

    image

    然后就可以在本地PC上面執行gdb命令,調試輸出在

    注意:執行target remote 后,開發板上面的程序已經在運行,本地不能使用run命令,而能用continue命令。

    調試命令在本地輸入,調試輸出結果在開發板上面輸出。

    原理介紹,在開發板上面的gdbserver會啟動一個子進程,然后用測試程序替換子進程,自身作為父進程,接收來自PC機上面arm-ling-gdb的調試命令輸入,

   

    讓程序在奔潰時產生core dump文件,用PC機上面的arm-linux-gdb來分析此文件,確定崩潰位置。  

    1. 產生core dump文件

       linux系統默認是不產生core dump文件(ulimit –c 得出結果為0,程序不產生),設置ulimit –c unlimited,不限制core dump輸出大小。

    2. 執行待測試程序,產生core dump文件,默認名為core

    3. 使用arm-linux-gdb調試core文件

        在本地PC機器上面,執行 arm-linux-gdb ./test_debug ./core 文件,就可以發現產生段錯誤的地址。

   

      這樣的調試,看起來很復雜,如果實在想調試,而且CPU處理速度夠快的話,直接移植低版本的gdb到板子上就行。

 

  gdb交叉調試相關鏈接:

  tiny4412 android gdb調試問題,不能打斷點(已解決)

  使用gdbserver遠程調試 遇到問題

  gdb+gdbserver交叉編譯

Technorati 標簽: gdbserver, linux


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM