Hi35xx NVR GDB調試html
1. 下載gdb源代碼linux
嵌入式Linux 的GDB 調試環境由Host 和Target 兩部分組成,Host 端使用arm-linuxgdb,Target Board 端使用gdbserver。這樣,應用程序在嵌入式目標系統上執行。而gdb 調試在Host 端,因此要採用遠程調試(remote)的方法。進行GDB 調試。目標系統必須包含gdbserver 程序(在主機上正對硬件平臺編譯成功後下載到目標機上),宿主機也必須安裝GDB 程序。ubuntu
通常Linux 發行版中都有一個可以執行的GDB,但開發者不能直接使用該發行版中的GDB 來作遠程調試,而要獲取GDB 的源碼包。針對arm 平臺做一個簡單配置,又一次編譯獲得對應GDB。app
GDB 的源碼包可以從
http://www.gnu.org/software/gdb/download/
http://ftp.gnu.org/gnu/gdb/ 211.95.105.202:3128 可以上去的,所有的版本號都有啊
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
XML: spa
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) 配置編譯環境。交叉編譯工具鏈爲海思交叉工具編譯鏈,我配置的交叉編譯器爲v400的arm-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-gdb。 source ./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
(gdb)target remote 192.168.1.143:2345
(命令格式target remote 開發板I P:port號 (和板子上執行gdbserver 的port號要一樣))
具體調試步驟請看上面文檔(gdb+gdbserver 方式進行ARM 板上程序調試.pdf)
#(gdb)C 運行程序
當代碼出現段錯誤,輸入bt 來查看堆棧信息跟蹤問題出現錯誤所在位置。
5. Core文件調試方法
編譯上面的gdb和gdbserver後,相同拷貝gdb和gdbserver到掛載文件夾。
執行命令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 爲掛載文件夾