1. 程式人生 > >arm linux下交叉編譯gdb除錯工具

arm linux下交叉編譯gdb除錯工具

       由於嵌入式系統資源有限性,一般不能直接在目標系統上進行除錯,通常採gdb+gdbserver的方式進行除錯。Gdbserver在目標系統中執行,gdb則在宿主機上執行。要進行GDB除錯,目標系統必須包括gdbserver程式,宿主機也必須安裝gdb程式,一般linux發行版中都有一個可以執行的gdb,但開發人員不能直接使用該發行版中的gdb來做遠端除錯,而要獲取gdb的原始碼包,針對arm平臺作一個簡單配置,重新編譯得到相應gdb。

一 :編譯gdb
1、解壓原始碼 tar xf gdb-8.1.tar.xz

2、建立gdb應用程式目錄   mkdir gdb_lib

3、進入原始碼目錄 cd gdb-8.1

4、配置 ./configure --target=arm-linux-uclibcgnueabi --enable-sim --enable-tui --prefix=/home/gdb_lib
--target :嵌入式的交叉編譯工具鏈 --prefix :生成gdb程式目錄

5、make

6、make install

7、去掉除錯資訊
    cd ../gdb_lib/bin
    strip arm-linux-uclibcgnueabi-gdb
    
二 、編譯安裝gdbserver
1、 cd gdb/gdbserver/

2、 ./configure --target=arm-linux-uclibcgnueabi --host=arm-linux-uclibcgnueabi

3、 make

4、 gdbserver目錄下就生成了一個gdbserver可執行檔案,拷貝到目標開發板上.

5、 去掉除錯資訊  arm-linux-uclibcgnueabi-strip gdbserver

三、除錯
1、開發板上:
   /mnt # ./gdbserver 172.16.1.109:2345 queue_arm
          Process queue_arm created; pid = 803
          Listening on port 2345
          
          Remote debugging from host 172.16.1.109  /*連上之後列印*/
          說明:
          172.16.1.109:宿主機IP地址
          2345 監聽埠開
          queue_arm 需要的除錯程式(編譯時加  -g 選項)
          
2、宿主機上 在gdb命令列執行  target remote 172.16.1.108:2345
[email protected]
:~/test_work$ arm-linux-uclibcgnueabi-gdb queue_arm
GNU gdb (GDB) 8.1
Copyright (C) 2016 Free Software Foundation, Inc.
(gdb) target remote 172.16.1.108:2345
Remote debugging using 172.16.1.108:2345
Reading /lib/ld-uClibc.so.0 from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /lib/ld-uClibc.so.0 from remote target...
Reading symbols from target:/lib/ld-uClibc.so.0...(no debugging symbols found)...done.
0xb6ff1e44 in _start () from target:/lib/ld-uClibc.so.0

(gdb)

三、總結

使用除錯工具的技巧:確定位置--》暫存器值--》檢視當前暫存器的狀態(修改命令和引數),通常的方法:

1、printf    我們在程式中懷疑的地方插入print語句來了解程式的執行流程控制流和變數值的改變。 它的缺點:需要進行程式編輯,新增'printf'語句,必須重新編譯,重新執行來獲得輸出。2、Proc/sys檔案系統  在某些情況下,我們需要弄清楚在一個執行在核心中的程序的狀態和記憶體對映。為了獲得這些資訊,我們不需要在核心中插入任何程式碼。 相反,可以用 /proc 檔案系統。在/proc的偽檔案系統,保留系統啟動執行就收集的執行時資訊 (cpu資訊, 記憶體容量等)。3、GDB除錯技巧:
3.1、執行程式3.2、設定斷點3.3、列印變數、設定變數值3.4、單步除錯

。。。。

下載

100個gdb除錯程式技巧https://download.csdn.net/download/u010872301/10028367