在嵌入式开发中,如何使用QT去调试程序是很重要的。调试无非分为以下几种方式:
(1)最初级的方式就是编译目标程序,然后拷贝到开发板,通过printf函数输出一些调试信息来调试程序。
(2)移植GDB,编译完目标程序后,在开发板运行GDB server,然后使用QT远程调试。
(3)使用QT一键远程调试程序,需要将目标程序拷贝到开发板。
方式一不仅麻烦还很难找出问题。方式而虽然可以调试,但很麻烦,每次编译玩程序后都得开呗到开发板。第三种方式灵活简单。本文是如何搭建第三种方式。过程中也包含了第二种方式。
主要分为以下几个部分:
第一部分:GDB调试工具安装
一.预处理(否则MAKE时候有错误)
sudo apt-getinstall texinfo
sudo apt-getinstall libncurses5-dev
sudo apt-getinstall m4
sudo apt-getinstall flex
sudo apt-getinstall bison
如果不做预处理,MAKE可能会出现下述错误
1、error: no termcap library found
2、error: makeinfo is required for compilation
二.搭建过程
在虚拟机Linux下ubuntu12.04
0.下载gdb-7.7.1.tar.gz(http://www.gnu.org/software/gdb/download/)手动到网页下载
1、将gdb-7.7.tar.gz拷贝到任意的位置
2、解压gdb-7.7.1.tar.gz
3、编译arm-linux-gdb(下面/usr/local是安装目录,可自行更改)
--with-python将python模块编译进来。因为QT creator3.1版本开始,调试必须有Python功能。
Ubuntu自带Python。位于/usr/bin/。
如果make出现如下错误
checkint for python2.7... /usr/bin/python2.7
checkint for python2.7... no
configure: error: no usable python found at python2.7
则需要在执行apt-get install python-dev。安装完成后再执行make。
4、编译GDB Client
5、将gdbserver通过你搭建的环境下载到开发板(我的环境是nfs)
三,使用例程
1.编辑文件
# geditgdbtest.c
#include <stdio.h>
int func(int n)
{
# arm-linux-gcc-g gdbtest.c -o gdbtest // 交叉编译
2.下载文件到目标板: gdbtest和gdbserver
将文件拷贝到目标板上(通过NFS或其他工具)
检查目标板上是否有gdbtest和gdbserver两个文件。(最好从共享文件夹把这两个文件移到目标板的其他一个目录下面)
3.运行调试
client board:
host pc:
#cd/usr/local/arm-gdb7.7/bin/ (就是arm-gdb的目录)
#cp gdbtest /usr/local/arm-gdb7.7/bin/ //将前面编译的文件gdbtest拷贝到此目录
测试
#./arm-linux-gdbgdbtest
(gdb)list or l
(gdb)break func
(gdb)break 22
(gdb)info br
(gdb)continue orc // 这里不能用 run
(gdb)next or n
(gdb)print or presult
(gdb) finish // 跳出func函数
(gdb) next
(gdb) quit
第二部分:Qt下使用GDB远程调试ARM板
需要工具:ARM开发板,GDB调试工具,Qt,nfs服务器
1.
2.
/work/zsaj/
3.
/home/alexon/Mpiwork/
4.
5.
# ./gdbserver
第一个是gdb服务器,第二个参数是主机ID和自定义的监视口,第三个参数是目标板上的目标程序,最后一个是-qws参数。
6.
Debugger选择之前安装的gdb调试工具,这里是/home/alexon/arm-gdb7.7/bin/arm-linux-gdb
Local executable选择该工程编译生成的本机上的可执行文件,这里是/home/alexon/Mpiwork/1234-build-arm/1234
Host and port设置的是目标板的IP以及刚才目标板定义的监视口
最后Architecture选择i386,OK即可开始调试,记得设置断点。
至此就是第二种调试方法了。