QT一键目标板远程调试

更新时间:2024-01-22 09:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. 说明

最近Qt IDE由于出色的跨平台特性,逐步开始流行。编译环境也集成了常用到的编译调试工具。大部分玩Linux的高手应该是自己写脚本来实现一键远程部署和调试等命令。但是对于新手不免有很大难度。下面说说利用QT自带的远程部署工具和远程调试工具gdbserver,远程SSH工具。无需安装NFS。 Gdbserver的安装参见

SSH的安装根据自己目标板安装。

2. 远程部署linux设备添加

打开工具》选项》linux设备》设备配置选项卡

添加一个通用Linux设备,这里需要输入设备名称,主机名称是(ARM)目标板IP地址,SSH端口默认是22,用户名和密码是你需要登录的账户,当然我建议登录root,当然这里填写自己目标板的root账户名密码。

3. 将工程添加远程部署

目的是把执行文件拷贝到目标板指定目录

点击左侧《编辑》选项卡,打开XXX.pro工程文件,添加如下代码 target.path = /opt

INSTALLS += target sources

上面代码的意思添加目标板文件路径,添加代码后点击左侧《项目》选项卡,打开运行《设置》标签,对该项目添加远程部署,点击添加,选择《部署到远程Linux主机》,配置设备选择①中添加的设备。

下面就可以看到刚才添加的目标文件路径,目标板可执行文件就存放在这里

4. 增加额外的远程命令

Qt远程运行和调试时有两个bug:

一是当第二次部署运行的时候,sftp部署会失败,弹出错误如下

造成这问题的原因很简单,就是旧可执行文件无法被新的文件覆盖,sftp也不能怎么加强制覆盖的参数。

二是当远程运行后,远程指令无法再点击停止按钮后退出远程指令进程,也就是说当你运行N次后目标板不断开闭进程,导致延迟越来越大,越来越卡。可以用PS命令来验证这个说法。

解决办法是增加一条远程部署命令删除原来的文件,同时也终止上一次远指令,写一个脚本文件我的名称名kill_list.sh,脚本文件如下

PID=`ps ax | grep $1 | awk '{if ($0 !~/grep/) {print $1}}'` # echo \if [ -n \

kill -9 $PID >/dev/null 2>&1 fi

点击《添加部署步骤》添加如下命令行:/opt/kill_list.sh是脚本文件路径,RichBike是可执行程序文件,&不阻塞。目的是找到包含这个可执行文件名的程序将它终止。

5. 远程运行配置

目的是程序在目标板运行,而且将打印信息显示在本地,从而实现远程运行 点击《添加》选择在《远程设备是运行》,参数选项的-qws如果目标板之前没有窗口程序那么你就需要加上它。

6. 远程运行测试

建议工程在改变编译环境时执行重新构建

点击运行按钮,如果正常运行,执行结果如下。

7. 远程部署调试

打开工具》选项》编译和运行》工具链选项卡

添加一个自定义工具链,也就是GCC编译器和调试器,编译器路径添加自己arm-linux-gcc编译器,arm-fsl-linux-gnueabi-gcc是我安装的交叉编译器。arm-linux-gdb是自己交叉编译环境的调试器,这里也可以用Gdbserver的调试器,如果环境变量配置文件正确的话编译器和调试器只输入名称就可以,会自动生成绝对路径。

8. 配置调试器

打开工具》选项》调试器》GDB选项卡

Gdb启动脚本:填写Gdbserver的arm-linux-gdb绝对目录,超时时间默认

9. 添加调试器

点击左侧《项目》的《构建设置》标签,在构建设置栏中添加qt的KIT,这里选择调试。 选择运行,无法进行调试。

10. 断点调试程序

在程序中先设置断点,点击调试按钮,如果正常运行,执行结果如下 可以看到程序进程PID、连接端口号、连接IP。

本文来源:https://www.bwwdw.com/article/gppo.html

Top