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

2019-07-12 19:25发布

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

1.环境:

  1. 主机UBUNTU12.04,Qt Creator3.6.1,IP地址192.168.199.249,编译器版本:gcc 4.6.3,交叉编译器版本:arm-linux-gcc 3.4.5
  2. 开发板
#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. 主机端调试器

  1. 下载调试器源码GDB: The GNU Project Debugger,我这里下载的是gdb-7.6.tar.gz。
  2. 解压缩tar zxvf gdb-7.6.tar.gz
  3. 进入工作目录cd gdb-7.6
  4. 配置./configure --target=arm-linux --prefix=/home/yy/ctools/arm-9261 -v
  5. make
  6. make install
这时arm-linux-gdbarm-linux-run就安装到了/home/yy/ctools/arm-9261/bin目录下了。

2.编译开发板端调试器

  1. 进入gdbserver的目录cd gdb/gdbserver
  2. 编译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 而没有:#include ,于是加上:#include ,再次编译: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就可以在主机上调试开发板中的程序了。