用Qt 呼叫GDB除錯 Arm程式 詳細步驟----可單步執行每一行
阿新 • • 發佈:2019-01-10
前言
本人交叉編譯環境 Ubuntu 10.04(虛擬機器),編譯工具鏈 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1
1、在虛擬機器Ubuntu 10.04上,安裝GDB除錯工具之前,要安裝預處理模組:
sudo apt-get install texinfo
sudo apt-get install libncurses5-dev
sudo apt-get install m4
sudo apt-get install flex
sudo apt-get install bison
2、安裝GDB除錯工具
2.0 下載gdb-7.4.tar.gz(http://www.gnu.org/software/gdb/download/)
手動到網頁下載
2.1、將gdb-7.4.tar.gz拷貝到任意的位置
2.2、解壓gdb-7.4.tar.gz
tar -zxvf gdb-7.4.tar.gz
2.3、編譯arm-linux-gdb(下面/usr/local是安裝目錄,可自行更改)
到目錄gdb-7.4下
cd gdb-7.4
$./configure --target=arm-hisiv100nptl-linux --prefix=/usr/local/arm-gdb -v
target指明編譯生成的GDB用於除錯ARM-LINUX程式,prefix指明安裝目錄
$make
#make install
#sudo gedit /etc/profile
export PATH=$PATH:/usr/local/arm-gdb/bin --把arm-linux-gdb加入環境變數
這樣就可以在/usr/local/arm-gdb/bin目錄下看到如下三個可執行檔案
arm-hisiv100nptl-linux-gdb
arm-hisiv100nptl-linux-gdbtui
arm-hisiv100nptl-linux-run
2.4、編譯GDB Server
#cd ./gdb/gdbserver (進入gdb-7.4目錄裡執行該句)
#export PATH=$PATH:/usr/local/arm-gdb/bin
#./configure --target=arm-hisiv100nptl-linux
#make CC=arm-hisiv100nptl-linux-gcc //編譯用於目標機的stub程式生成gdbserver是GDB客戶端程式,在板子上執行。
此時發現有錯誤,開啟config.h檔案,把相應的行註釋掉:
//#define HAVA_SYS_REG_H
//define HAVE_DECL_ADDR_NO_RANDOMIZE 1
有的人說只需要註釋一行就可以了,我的需要註釋這兩行
註釋完後,儲存並關閉config.h,重新執行:
make clean
make CC=arm-hisiv100nptl-linux-gcc。成功後會生成可自行程式gdbserver。
2.5、將gdbserver通過你搭建的環境下載到開發板(我的環境是/mnt/nfs/samples),與你的可自行程式放在一個資料夾下
3、以sample_venc為例,構建Qt工程:(我的SDK路徑是:/root/hixx/Hi3520D_SDK_V1.0.3.2/)
3.1、在$SDK_PATH/sample/下建立資料夾,我命名為qt_venc。拷貝$SDK_PATH/sample/venc/sample_venc.c到qt_venc。開啟命令列,進入qt_venc資料夾,執行qmake -project。這樣就自動生成了Qt工程檔案。用QtCreator開啟這個工程檔案qt_venc.pro,把工程檔案修改如下:(注意檔案路徑各人情況不同,請酌情修改)
# #####################################################################
# Automatically generated by qmake (2.01a) ?? 6? 9 16:55:18 2015
# #####################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/include \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/sample/common \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/tw2865 \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/tw2960 \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/tlv320aic31 \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/cx26828
DEFINES += hi3520D \
HICHIP=0x3520D100 \
HI_DEBUG \
HI_XXXX \
DEMO
# Input
SOURCES += sample_venc.c \
../common/sample_comm_vpss.c \
../common/sample_comm_vo.c \
../common/sample_comm_vi.c \
../common/sample_comm_venc.c \
../common/sample_comm_vdec.c \
../common/sample_comm_vda.c \
../common/sample_comm_sys.c \
../common/sample_comm_audio.c \
../common/loadbmp.c
LIBS += /root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libmpi.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libhdmi.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libVoiceEngine.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libaec.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libresampler.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libanr.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libjpeg.a
CONFIG += debug
本人交叉編譯環境 Ubuntu 10.04(虛擬機器),編譯工具鏈 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1
1、在虛擬機器Ubuntu 10.04上,安裝GDB除錯工具之前,要安裝預處理模組:
sudo apt-get install texinfo
sudo apt-get install libncurses5-dev
sudo apt-get install m4
sudo apt-get install flex
sudo apt-get install bison
2、安裝GDB除錯工具
2.0 下載gdb-7.4.tar.gz(http://www.gnu.org/software/gdb/download/)
手動到網頁下載
2.1、將gdb-7.4.tar.gz拷貝到任意的位置
2.2、解壓gdb-7.4.tar.gz
tar -zxvf gdb-7.4.tar.gz
2.3、編譯arm-linux-gdb(下面/usr/local是安裝目錄,可自行更改)
到目錄gdb-7.4下
cd gdb-7.4
$./configure --target=arm-hisiv100nptl-linux --prefix=/usr/local/arm-gdb -v
target指明編譯生成的GDB用於除錯ARM-LINUX程式,prefix指明安裝目錄
$make
#make install
#sudo gedit /etc/profile
export PATH=$PATH:/usr/local/arm-gdb/bin --把arm-linux-gdb加入環境變數
這樣就可以在/usr/local/arm-gdb/bin目錄下看到如下三個可執行檔案
arm-hisiv100nptl-linux-gdb
arm-hisiv100nptl-linux-gdbtui
arm-hisiv100nptl-linux-run
2.4、編譯GDB Server
#cd ./gdb/gdbserver (進入gdb-7.4目錄裡執行該句)
#export PATH=$PATH:/usr/local/arm-gdb/bin
#./configure --target=arm-hisiv100nptl-linux
#make CC=arm-hisiv100nptl-linux-gcc //編譯用於目標機的stub程式生成gdbserver是GDB客戶端程式,在板子上執行。
此時發現有錯誤,開啟config.h檔案,把相應的行註釋掉:
//#define HAVA_SYS_REG_H
//define HAVE_DECL_ADDR_NO_RANDOMIZE 1
有的人說只需要註釋一行就可以了,我的需要註釋這兩行
註釋完後,儲存並關閉config.h,重新執行:
make clean
make CC=arm-hisiv100nptl-linux-gcc。成功後會生成可自行程式gdbserver。
2.5、將gdbserver通過你搭建的環境下載到開發板(我的環境是/mnt/nfs/samples),與你的可自行程式放在一個資料夾下
3、以sample_venc為例,構建Qt工程:(我的SDK路徑是:/root/hixx/Hi3520D_SDK_V1.0.3.2/)
3.1、在$SDK_PATH/sample/下建立資料夾,我命名為qt_venc。拷貝$SDK_PATH/sample/venc/sample_venc.c到qt_venc。開啟命令列,進入qt_venc資料夾,執行qmake -project。這樣就自動生成了Qt工程檔案。用QtCreator開啟這個工程檔案qt_venc.pro,把工程檔案修改如下:(注意檔案路徑各人情況不同,請酌情修改)
# #####################################################################
# Automatically generated by qmake (2.01a) ?? 6? 9 16:55:18 2015
# #####################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/include \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/sample/common \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/tw2865 \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/tw2960 \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/tlv320aic31 \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/extdrv/cx26828
DEFINES += hi3520D \
HICHIP=0x3520D100 \
HI_DEBUG \
HI_XXXX \
DEMO
# Input
SOURCES += sample_venc.c \
../common/sample_comm_vpss.c \
../common/sample_comm_vo.c \
../common/sample_comm_vi.c \
../common/sample_comm_venc.c \
../common/sample_comm_vdec.c \
../common/sample_comm_vda.c \
../common/sample_comm_sys.c \
../common/sample_comm_audio.c \
../common/loadbmp.c
LIBS += /root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libmpi.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libhdmi.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libVoiceEngine.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libaec.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libresampler.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libanr.a \
/root/hixx/Hi3520D_SDK_V1.0.3.2/mpp/lib/libjpeg.a
CONFIG += debug
########################## pro 檔案結束 ###############
說明:本人的Qt 4.8.5 是交叉編譯過的,因此開啟QtCreator Tools--->Options ,點選Qt4\Qt Versions 可以看到如下圖:
從圖上可以看到我的虛擬機器有兩個版本的Qt:Qt4.6.2linux 和Qt4.8.5arm
請確認 Default Qt Version 是不是arm版的Qt,否則編譯的程式無法在板子上執行。
qt_venc.pro檔案生成後,還不能開始編譯,要點一下QtCreator左側的“Projects”按鈕,核實一下編譯設定。我的編譯設定如下圖:
發現編譯設定正確,然後就可以編譯qt_venc了
3.2 編譯qt_venc之後,生成目的碼,把它拷貝到開發板。假設開發板IP :172.18.1.178。本人虛擬機器IP:172.18.1.176。除錯qt_venc步驟如下: 在開發板執行: cd /mnt/nfs/samples 進入工作目錄 ./gdbserver 172.18.1.176:3333 qt_venc 0 -qws 在開發板啟動除錯服務。其中172.18.1.176是除錯PC的IP,3333是自定的除錯埠qt_venc執行時帶引數0表示4D1錄影;-qws是qt程式在板子上執行必須帶的引數。 在虛擬機器上QtCreator選單上,選擇Debug ---->Start Debugging ----> Start and Attach to Remote Application,然後出現下圖: QQ圖片20150702095951.png 點“OK” 然後就可以單步除錯了。可以看到斷點、程序、以及變數的Watcher視窗 |