1 环境
Win10 64位系统上通过Virtual Box安装了一个Ubuntu虚拟机。
ubuntu的版本:Linux kernel 4.15.0-142-generic #146~16.04.1-Ubuntu SMP
Ubuntu虚拟机中安装了Qt Creator,其版本为:
Qt Creator 4.5.1
Based on Qt 5.10.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit)
Built on Feb 10 2018 04:21:03
From revision 24cd0b1cd6
开发板系统:执行uname -a 显示:
Linux imx6qsabresd 4.14.98+g5d6cbeafb80c #1 SMP PREEMPT Wed Nov 25 13:54:56 CST 2020 armv7l armv7l armv7l GNU/Linux
交叉编译工具链:
虚拟机上已经配置好了开发板厂家提供的交叉工具编译链。一定要是板子厂家提供的交叉编译工具链!!务必严格对应!
交叉编译gcc编译器路径(这只是我个人的,因人而异):
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
交叉编译g++编译器路径(这只是我个人的,因人而异):
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
交叉编译gdb路径(这只是我个人的,因人而异):
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb
如果不知道交叉编译工具链的gdb在哪个具体路径,可以在虚拟机上执行: find / -name *gdb
2 必要的前提
网络通达性
虚拟机必须能与开发板建立网络通讯,能互相ping。
比如本人的虚拟机IP:192.168.40.159
开发板IP: 192.168.40.54
Win10 IP: 192.168.40.181
三者处于同一网段之下。
gdbserver
确保开发板上已经安装了gdbserver。如果没有安装,请自行查询办法。
一般位于/usr/bin目录之下。同样可通过find / -name gdbserver查找。
能往开发板文件系统上传输文件
一般采用NFS挂载、Tftpd工具、scp手段等等。自由选择。
3 Qt Creator配置
在项目配置中,选择Device,输入开发板的IP,SSH端口默认位22,有用户名密码的输入密码,若没有,置空即可。之后点击Test,网络没问题的话会有很明显的连接成功提示。最后,点击Ok.
在选择Bulid&Run,新建Debugger(指定交叉编译工具链的gdb)
项目的编译器设置:
项目的Kits设置:
4 调试步骤
1,使用交叉编译工具链,编译你的工程,得到可执行文件。
2,将可执行文件拖进板子的某个目录,比如/opt/app目录下。
每当源码变动的时候,请一定记得重新执行步骤1,2。
3, 在xshell等终端环境下进入到板子的/opt/app目录下,执行gdbserver .
gdbserver
192.168.40.159:1234 ./filename (你的可执行文件名)
如上文所述,192.168.40.159为win10上Ubuntu虚拟机的IP地址,1234是指定一个服务端口。
执行gdbserver
192.168.40.159:1234 ./filename之后,能在终端看到程序启动的PID等信息,说明启动OK!
4,在虚拟机上的QtCreator中,
再选右侧的Attach to running debug server,
点击OK,这种远程调试会需要十几二十秒的加载启动时间,没有本地调试那么快。
之后在QT Creator中打断点,看变量,就行了!!!所有的Print输出在QT Creator是不可见的,需要在连接到开发板的终端界面中查看。