您的位置:首页 > 运维架构 > Linux

Qt Creator远程调试嵌入式ARM开发板上的Linux程序

2016-12-25 12:05 1226 查看
Qt自带调试功能,如果是主机上的程序可以直接调试,非常方便。同时,Qt是一个跨平台的编程语言,在主机上调试其他平台上的程序时就需要相应的设置。这种跨平台的调试在嵌入式开发时尤为重要,这里对跨平台的Qt调试作一个简单的介绍。

1.环境:

主机UBUNTU12.04,Qt Creator3.6.1,IP地址192.168.199.249,编译器版本:gcc 4.6.3,交叉编译器版本:arm-linux-gcc 3.4.5

开发板

#uname -a
Linux (none) 2.6.24 #24 Sun Jul 10 13:10:31 CST 2011 armv5tejl unknown


IP地址192.168.199.99

2.编译调试器

1. 主机端调试器

下载调试器源码GDB: The GNU Project Debugger,我这里下载的是gdb-7.6.tar.gz。

解压缩
tar zxvf gdb-7.6.tar.gz


进入工作目录
cd gdb-7.6


配置
./configure --target=arm-linux --prefix=/home/yy/ctools/arm-9261 -v


make


make install


这时
arm-linux-gdb
arm-linux-run
就安装到了
/home/yy/ctools/arm-9261/bin
目录下了。

2.编译开发板端调试器

进入gdbserver的目录
cd gdb/gdbserver


编译
make


编译过程中出了一点小问题,没有定义
PTRACE_GETSIGINFO


linux-arm-low.c:643: error: `PTRACE_GETSIGINFO' undeclared (first use in this function)


解决方法参考应用调试之使用gdb和gdbserver

这里提示没有
PTRACE_GETSIGINFO
这个东西,这里搜索
PTRACE_GETSIGINFO
的路径为-I指定的头文件以及交叉编译工具链,我们不妨到交叉编译工具链里面去查找一下:

cd /usr/local/arm/3.4.5/


grep "PTRACE_GETSIGINFO" * -nR


找到如下信息:

arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO       0x4202
arm-linux/include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO   0x4202
distributed/arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO   0x4202
distributed/arm-linux/include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO       0x4202


说明
PTRACE_GETSIGINFO
是在交叉编译工具链:
linux/ptrace.h
文件里定义的,那么可能是头文件没有包含好吧!

我们到gdbserver下的
linux-arm-low.c
里面一看,可不是嘛,只有:
#include <sys/ptrace.h>
而没有:
#include <linux/ptrace.h>
,于是加上:
#include <linux/ptrace.h>
,再次编译:
make CC=/usr/local/arm/3.4.5/bin/arm-linux-gcc
,成功!

重新编译就好了,这时在当前文件夹下就可以看到
gdbserver
文件了。

3.测试

1. 设置开发板端

将编译好的文件和gdbserver拷贝到开发板上,执行

./gdbserver 192.168.199.249:1234 filename


其中IP是主机的IP地址。

显示,说明gdbserver已经在运行了。

process filename created; pid = 319
Listening on port 1234


2. 设置主机端Qt Creator

进入
调试-->开始调试-->Attach To Running Debug Server




端口号是上一步骤中设置的端口号;
Override server address
是开发板的IP地址;本地执行档是程序的二进制文件,要和开发板中执行的一致;开发套件中的调试器要选择上面编译好的arm-linux-gdb;



点击OK就可以在主机上调试开发板中的程序了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息