文章标题
说明
近期Qt IDE因为出色的跨平台特性。逐步開始流行。编译环境也集成了经常使用到的编译调试工具。大部分玩Linux的高手应该是自己写脚本来实现一键远程部署和调试等命令。
可是对于新手不免有非常大难度。以下说说利用QT自带的远程部署工具和远程调试工具gdbserver,远程SSH工具。无需安装NFS。
Gdbserver的安装參见http://blog.chinaunix.net/uid-12461657-id-3048285.html
SSH的安装依据自己目标板安装。
1远程部署linux设备加入
打开工具》选项》linux设备》设备配置选项卡
加入一个通用Linux设备。这里须要输入设备名称,主机名称是(ARM)目标板IP地址,SSHport默认是22,username和password是你须要登录的账户。当然我建议登录root,当然这里填写自己目标板的root账户名password。
2将project加入远程部署
目的是把执行文件复制到目标板指定文件夹
点击左側《编辑》选项卡,打开XXX.proproject文件,加入例如以下代码
target.path = /opt
INSTALLS += target sources
上面代码的意思加入目标板文件路径,加入代码后点击左側《项目》选项卡。打开执行《设置》标签,对该项目加入远程部署,点击加入。选择《部署到远程Linux主机》,配置设备选择①中加入的设备。
以下就能够看到刚才加入的目标文件路径。目标板可执行文件就存放在这里
3添加额外的远程命令
Qt远程执行和调试时有两个bug:
一是当第二次部署执行的时候。sftp部署会失败。弹出错误例如以下
造成这问题的解决办法非常easy,就是旧可执行文件无法被新的文件覆盖,sftp也不能怎么加强制覆盖的參数。
二是当远程执行后,远程指令无法再点击停止button后退出远程指令进程。也就是说当你执行N次后目标板不断开闭进程。导致延迟越来越大。越来越卡。
能够用PS命令来验证这个说法。
解决的方法是添加一条远程部署命令删除原来的文件,同一时候也终止上一次远指令。写一个脚本文件我的名称名kill_list.sh。脚本文件例如以下
PID=ps ax | grep $1 | awk '{if ($0 !~/grep/) {print $1}}'
# echo “PID=
kill -9 $PID >/dev/null 2>&1
fi
点击《加入部署步骤》加入例如以下命令行:/opt/kill_list.sh是脚本文件路径,RichBike是可执行程序文件,&不堵塞。目的是找到包括这个可执行文件名称的程序将它终止。
4远程执行配置
目的是程序在目标板执行,并且将信息打印显示在本地,从而实现远程执行
点击《加入》选择在《远程设备是执行》,參数选项的-qws假设目标板之前没有窗体程序那么你就须要加上它。
5远程执行測试
建议project在改变编译环境时执行又一次构建
点击执行button,假设正常执行,执行结果例如以下。
6远程部署调试
打开工具》选项》编译和执行》工具链选项卡
加入一个自己定义工具链。也就是GCC编译器和调试器。编译器路径加入自己arm-linux-gcc编译器。arm-fsl-linux-gnueabi-gcc是我安装的交叉编译器。arm-linux-gdb是自己交叉编译环境的调试器。这里也能够用Gdbserver的调试器,假设环境变量配置文件正确的话编译器和调试器仅仅输入名称就能够,会自己主动生成绝对路径。
7配置调试器
打开工具》选项》调试器》GDB选项卡
Gdb启动脚本:填写Gdbserver的arm-linux-gdb绝对文件夹,超时时间默认
8加入调试器
点击左側《项目》的《构建设置》标签。在构建设置栏中加入qt的KIT。这里选择调试。
选择执行。无法进行调试。
9断点调试程序
在程序中先设置断点,点击调试button,假设正常执行,执行结果例如以下
能够看到程序进程PID、连接port号、连接IP。