易百纳论坛

 找回密码
 注册
搜索
热搜: 海思 四轴 linux
查看: 2362|回复: 8

[测量工具] 用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行

[复制链接]
发表于 2015-7-2 09:19:04 | 显示全部楼层 |阅读模式
前言
本人交叉编译环境 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  文件结束   ###############
 楼主| 发表于 2015-7-2 09:46:15 | 显示全部楼层
本帖最后由 zzwdl9379 于 2015-7-2 09:47 编辑

说明:本人的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了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2015-7-2 09:49:27 | 显示全部楼层
另外,关于交叉编译Qt 4.8.6的详细步骤,如有朋友需要,本人可另外发帖。在此不做详述。
 楼主| 发表于 2015-7-2 10:01:16 | 显示全部楼层
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,然后出现下图:
   
    点“OK”
   然后就可以单步调试了。可以看到断点、进程、以及变量的Watcher窗口

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2015-7-2 10:02:13 | 显示全部楼层
赞。感谢LZ分享。
 楼主| 发表于 2015-7-2 10:05:09 | 显示全部楼层
注:在虚拟机上QtCreator菜单上,选择Debug ---->Start Debugging ----> Start and Attach to Remote Application时,出现“Sart Debugger”窗口里,填写目标板的IP和端口,如果端口是3333,那么都应该填写3333,使用同样的端口

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2016-3-14 23:23:48 | 显示全部楼层
感谢LZ, 学习一下
发表于 2016-6-14 23:52:39 | 显示全部楼层
好东西,一直用printf,头都大了,GDB一次都没弄成功过,配置超级复杂,郁闷的不行
发表于 2016-12-26 16:09:40 | 显示全部楼层
好资料,顶顶顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易百纳 ( 苏ICP备14036084 )

GMT+8, 2017-1-17 01:17 , Processed in 0.140957 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表