Hi35xx NVR GDB調試

Hi35xx NVR GDB調試

 

1. 下載gdb源碼

嵌入式Linux GDB 調試環境由Host Target 兩部分組成,Host 端使用armlinuxgdbTarget Board 端使用gdbserver。這樣,應用程序在嵌入式目標系統上運行,而gdb 調試在Host 端,所以要採用遠程調試(remote)的方法。進行GDB 調試,目標系統必須包括gdbserver 程序(在主機上正對硬件平臺編譯成功後下載到目標機上),宿主機也必須安裝GDB 程序。一般Linux 發行版中都有一個可以運行的GDB,但開發人員不能直接使用該發行版中的GDB 來做遠程調試,而要獲取GDB 的源代碼包,針對arm 平臺作一個簡單配置,重新編譯得到相應GDBGDB 的源代碼包可以從
http://www.gnu.org/software/gdb/download/
http://ftp.gnu.org/gnu/gdb/ 211.95.105.2023128 可以上去的,所有的版本都有啊
http: //ftp.cs.pu.edu.tw/linux/sourceware/gdb/releases/下載
ftp://ftp.gnu.org/gnu/gdb
外網的ftp 我經常上不去,國內常見的開源社區的下載頻道通常都有下載的
http://download.chinaunix.net/download/0004000/3482.shtml

我下載的版本gdb-7.10.tar.gz。下載到某個目錄,如/opt

 

參考資料:gdb+gdbserver 方式進行ARM 板上程序調試 http://blog.csdn.net/hejianhua/article/details/7312979

XML

http://blog.csdn.net/yangzhongxuan/article/details/13002789

 

2.配置編譯環境

1) 解壓gdb源碼tar zxvf gdb-7.10.tar.gz -C /opt/

2) 進入到gdb源碼目錄,cd /opt/gdb-7.10

3) 配置編譯環境,交叉編譯工具鏈爲海思交叉工具編譯鏈,我配置的交叉編譯器爲v400arm-hisiv400nptl-linux

4)詳細編譯步驟

1、./configure --target=arm-hisiv400nptl-linux --prefix=/opt/hisi-gdb/ -v

(--target 配置gdb 的目標平臺, --prefix 配置安裝路徑, 當然其他路徑也可以, .跟下面配置一致即可,須在環境變量中聲明, 啓動arm-hisiv400nptl-linux-gdb 需要, 打開

vi  /etc/profile , 添加export PATH=$PATH:/opt/hisi-gdbsource  ./etc/profile使配置生效)

配置完成後生成makefile

 

2、make
  make install
    生成arm-hisiv400nptl-linux-gdb,並存入/opt/hisv-gdb  /bin

3、安裝完成後進入cd  /opt/gdb-7.10/gdb/gdbserver

      ./configure --target=arm-hisiv400-linux  --host=arm-hisiv400-linux
      --target=arm-hisiv400-linux表示目標平臺,

--host 表示主機端運行的是arm-hisiv400-linux-gdb
    make 生成gdbserver

 

3.代碼加-g編譯。

在代碼路徑下E:\my_code\his3520d_v2-8-0-8_3536\Build進入到Build目錄下,打開Rules.mak文件進行修改。

 

定義debug = 1  編譯代碼,注意可執行文件生成路徑。Debug版本編譯生成的可執行文件和release版本生成的可執行文件路徑不同。在out文件夾下面例如Hi3536: (\Out\Hi3536\app)目錄下會生成一個debug的文件夾,debug版本生成的可執行程序存放在此文件夾下面。

 

4.gdb源碼編譯好的可執行程序gdb gdbserver拷貝到掛載路徑下。

板端運行命令:

#./gdbserver 192.168.1.141:2345 vfware  

(命令格式 #. /gdbs er v er  主機I P: 端口號 程序)

出現提示:

Process  borad  created; pid = 776

Listening on port 2345

Remote debugging from host 192.168.1.141

 

ubuntu下運行命令:

在主機上運行arm-hisiv400-linuxnptl-gdb,注意這個gdb是用源碼編譯出來的,在安裝路徑/opt/hisiv-gdb/bin路徑下。

 

在主機端運行gdb

#. /gdb

gdbtarget remote 192.168.1.143:2345

(命令格式target remote 開發板I P:端口號 (和板子上運行gdbserver 的端口號要相同))

詳細調試步驟請看上面文檔(gdb+gdbserver 方式進行ARM 板上程序調試.pdf

#gdbC  執行程序

當代碼出現段錯誤,輸入bt 來查看堆棧信息跟蹤問題出現錯誤所在位置。

 

 

 

5. Core文件調試方法

編譯上面的gdbgdbserver後,同樣拷貝gdbgdbserver到掛載目錄,

執行命令ulimit -c  10000000000  設置臨時core文件的大小爲無窮大,注意每次重新運行程序都要設置

然後執行./gdb  vfware  core    (vfware 爲調試程序,也是加-g 編譯出來的程序,注意libuv庫中有用到clock_gettime()clock_getres()函數,加-g編譯時會報未定義錯誤,所以編譯時還要加 -lrt, 才能成功編譯debug版本)

程序如果產生段錯誤Segmentation fault. 會在當前掛載路徑下產生一個core文件。

執行完./gdb  vfware  core後出現如下信息

 

 

使用命令bt查看當前堆棧的信息,既出現錯誤的地方

 

 

注意:

     可能會出現下面這種情況

#0 0x7bf99014 in ?? ()

#1 0x7bf020f8 in ?? ()

 

看不到堆棧的信息,只有地址和問號。我們可以看到上面的提示信息

 

意思是有5個共享庫的函數找不到,我們把板子上的庫拷貝到掛載目錄即可

cp /lib/ /mnt/nfs  -rf     /lib爲目標板上的庫文件夾   /mnt/nfs 爲掛載目錄

 

發佈了80 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章