文章标题

说明

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

1远程部署linux设备添加
打开工具》选项》linux设备》设备配置选项卡
添加一个通用Linux设备,这里需要输入设备名称,主机名称是(ARM)目标板IP地址,SSH端口默认是22,用户名和密码是你需要登录的账户,当然我建议登录root,当然这里填写自己目标板的root账户名密码。

文章标题_第1张图片

2将工程添加远程部署

目的是把执行文件拷贝到目标板指定目录
点击左侧《编辑》选项卡,打开XXX.pro工程文件,添加如下代码
target.path = /opt
INSTALLS += target sources
上面代码的意思添加目标板文件路径,添加代码后点击左侧《项目》选项卡,打开运行《设置》标签,对该项目添加远程部署,点击添加,选择《部署到远程Linux主机》,配置设备选择①中添加的设备。
文章标题_第2张图片
下面就可以看到刚才添加的目标文件路径,目标板可执行文件就存放在这里

3增加额外的远程命令

Qt远程运行和调试时有两个bug:
一是当第二次部署运行的时候,sftp部署会失败,弹出错误如下
文章标题_第3张图片
造成这问题的原因很简单,就是旧可执行文件无法被新的文件覆盖,sftp也不能怎么加强制覆盖的参数。
二是当远程运行后,远程指令无法再点击停止按钮后退出远程指令进程,也就是说当你运行N次后目标板不断开闭进程,导致延迟越来越大,越来越卡。可以用PS命令来验证这个说法。
解决办法是增加一条远程部署命令删除原来的文件,同时也终止上一次远指令,写一个脚本文件我的名称名kill_list.sh,脚本文件如下
PID=ps ax | grep $1 | awk '{if ($0 !~/grep/) {print $1}}'
# echo “PID= PIDif[n PID” ]; then
kill -9 $PID >/dev/null 2>&1
fi
点击《添加部署步骤》添加如下命令行:/opt/kill_list.sh是脚本文件路径,RichBike是可执行程序文件,&不阻塞。目的是找到包含这个可执行文件名的程序将它终止。

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

5远程运行测试
建议工程在改变编译环境时执行重新构建
点击运行按钮,如果正常运行,执行结果如下。
文章标题_第5张图片
6远程部署调试
打开工具》选项》编译和运行》工具链选项卡
添加一个自定义工具链,也就是GCC编译器和调试器,编译器路径添加自己arm-linux-gcc编译器,arm-fsl-linux-gnueabi-gcc是我安装的交叉编译器。arm-linux-gdb是自己交叉编译环境的调试器,这里也可以用Gdbserver的调试器,如果环境变量配置文件正确的话编译器和调试器只输入名称就可以,会自动生成绝对路径。
文章标题_第6张图片

7配置调试器
打开工具》选项》调试器》GDB选项卡
Gdb启动脚本:填写Gdbserver的arm-linux-gdb绝对目录,超时时间默认
文章标题_第7张图片
8添加调试器
点击左侧《项目》的《构建设置》标签,在构建设置栏中添加qt的KIT,这里选择调试。
选择运行,无法进行调试。

9断点调试程序
在程序中先设置断点,点击调试按钮,如果正常运行,执行结果如下
可以看到程序进程PID、连接端口号、连接IP。
文章标题_第8张图片

你可能感兴趣的:(QT-一键推送远程调)