zzwdl9379

zzwdl9379

0个粉丝

3

问答

0

专栏

0

资料

zzwdl9379  发布于  2015-07-02 09:19:04
采纳率 0%
3个问答
8551

用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  文件结束   ###############
我来回答
回答8个
时间排序
认可量排序

zzwdl9379

0个粉丝

3

问答

0

专栏

0

资料

zzwdl9379 2015-07-02 09:46:15
认可0
本帖最后由 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了

zzwdl9379

0个粉丝

3

问答

0

专栏

0

资料

zzwdl9379 2015-07-02 09:49:27
认可0
另外,关于交叉编译Qt 4.8.6的详细步骤,如有朋友需要,本人可另外发帖。在此不做详述。

zzwdl9379

0个粉丝

3

问答

0

专栏

0

资料

zzwdl9379 2015-07-02 10:01:16
认可0
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窗口

ecomsbz

1个粉丝

22

问答

0

专栏

36

资料

ecomsbz 2015-07-02 10:02:13
认可0
赞。感谢LZ分享。

zzwdl9379

0个粉丝

3

问答

0

专栏

0

资料

zzwdl9379 2015-07-02 10:05:09
认可0
注:在虚拟机上QtCreator菜单上,选择Debug ---->Start Debugging ----> Start and Attach to Remote Application时,出现“Sart Debugger”窗口里,填写目标板的IP和端口,如果端口是3333,那么都应该填写3333,使用同样的端口

lejianz

0个粉丝

1

问答

0

专栏

1

资料

lejianz 2016-03-14 23:23:48
认可0
感谢LZ, 学习一下

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-14 23:52:39
认可0
好东西,一直用printf,头都大了,GDB一次都没弄成功过,配置超级复杂,郁闷的不行

cy_ygs

0个粉丝

0

问答

0

专栏

0

资料

cy_ygs 2016-12-26 16:09:40
认可0
好资料,顶顶顶
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区