用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行

前言
本人交叉编译环境 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 (8.28 KB, 下载次数: 0)

下载附件

2015-7-2 09:59 上传


    点“OK”
   然后就可以单步调试了。可以看到断点、进程、以及变量的Watcher窗口


你可能感兴趣的:(qt)