Hi35xx NVR GDB調試

Hi35xx NVR GDB調試html

 

1. 下載gdb源代碼linux

嵌入式Linux GDB 調試環境由Host Target 兩部分組成,Host 端使用armlinuxgdbTarget Board 端使用gdbserver。這樣,應用程序在嵌入式目標系統上執行。而gdb 調試在Host 端,因此要採用遠程調試(remote)的方法。進行GDB 調試。目標系統必須包含gdbserver 程序(在主機上正對硬件平臺編譯成功後下載到目標機上),宿主機也必須安裝GDB 程序。ubuntu

通常Linux 發行版中都有一個可以執行的GDB,但開發者不能直接使用該發行版中的GDB 來作遠程調試,而要獲取GDB 的源碼包。針對arm 平臺做一個簡單配置,又一次編譯獲得對應GDBapp

GDB 的源碼包可以從
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 ui

XMLspa

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

 

2.配置編譯環境debug

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

2) 進入到gdb源代碼文件夾,cd /opt/gdb-7.10

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

4)具體編譯步驟

一、./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

 

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

三、安裝完畢後進入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: port號 程序)

出現提示:

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:port號 (和板子上執行gdbserver 的port號要一樣))

具體調試步驟請看上面文檔(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 爲掛載文件夾

相關文章
相關標籤/搜索