QT Creator 环境使用 remote debug 调试 arm 程序
这里使用的 4.8.5 QTE 环境,之前尝试过远程使用 GDB 来调试板子上的 QT 程序,但是没成功。没有调试手段比较痛苦,今天又花了点时间,居然搞定了。粗做记录。
工具版本:
1. QtCreator: 2.4.1 based on Qt4.8.0, 32bit
2. arm-linux-gcc: 4.5.1, 从友善之臂的开发光盘上拿来的
3. GDB: gdb-7.6
4. QTE 4.8.5-32bit: 从友善之臂的光盘上抠来的
5. mint13 (操作可参考 ubuntu12.4)
以下工作,是基于友善之臂的开发环境做的。但是应该主要思路是一致的。如下图所示,QtCreator 通过调用 arm-linux-gdb ,与开发板上的 gdb-server 通过 TCP/IP 进行通信,协同完成 bin 文件的调试;二者都使用共同的 symbol 库,QtCreator 负责解析,gdbserver 负责抓取 symbol 和寄存器值。
所以,这里需要做的工作就是,需要1)编译出 arm-linux-gdb 以及 2)gdbserver,还有,配置编译出针对板子的3)带 debug 信息的二进制文件。
1,2)编译 gdb
1和2是同一个工作,都是从 gdb 源码来编译的,所以,不分开来记录。
首先,下载并解压源码包,得到 gdb 源码目录 /tmp/gdb-7.6.
在 /tmp/gdb-7.6 目录下新建文件夹 __install,做安装文件拷贝目录.
执行 autoconf 脚本,使用如下参数:
./configure --target=arm-linux --disable-tui --prefix=/tmp/gdb-7.6/__install/
make -j && make install
此时,在 /tmp/gdb-7.6/__install/ 目录下,看到有 bin、lib、include 等文件夹。将这 3 个文件夹下的内容拷贝到 toolchain/4.8.5/arm-linux-eabui/ 对应目录下。
然后,切换目录到 /tmp/gdb-7.6/gdb/gdbserver/ 下,准备编译 gdbserver。
执行 autoconf 脚本,使用如下参数:
./configure --target=arm-linux --host=arm-linux --prefix=/tmp/gdb-7.6/__install/server/
make -j&&make install
此时,我们在 /tmp/gdb-7.6/__install/server 下发现 bin 和 share 两个文件夹。bin 下面,就是我们需要的,在开发板上运行的 gdbserver,拷贝到板子上就行了。
我们可以尝试用 gdbserver 来运行程序:
$ gdbserver 192.168.1.230: packet_analyzer
Process packet_analyzer created; pid =
Cannot exec packet_analyzer: Exec format error. Child exited with status
No program to debug. GDBserver exiting
这是因为这里使用的二进制文件不包含调试信息的缘故,需要编译带 debug 信息的二进制文件才能被 gdb 使用。
3) 编译带调试信息的 arm 二进制文件
我是直接对我的 QtCreator 进行了配置,添加了 QtE 4.8.5 的开发环境 和 arm-linux-4.5.1 的路径。截图如下:


添加了工具链之后,就可以在工程的 project 页面下,看到下面的选项,在这里添加 debug-build for ARM。

添加这样一个 build 选项后,我们就可以点击 run 生成二进制文件了。

4)远程调试
将二进制文件拷到开发板,并使用 gdbserver 执行二进制文件(remote debuging 部分是因为 qtcreator 连过来之后,才打印的):
# gdbserver 192.168.1.230: packet_analyzer
Process packet_analyzer created; pid =
Listening on port
Remote debugging from host 192.168.1.243
hi
hello smvSocket
Compiling packet filter failed!
do nothing...
smvProcess::Open(), Open Smv Socket succeed!
在代码中设置断点。
配置 QtCreator->debug->start debuging->attached to remote debug server... ,并配置如下,点击 ok 连接到开发板的 gdbserver。

此时,看到 QtCreator 中的代码停在了 我们设置的断点处,单步也可以进行。

可能还有更方便的方法,待实验。
后续...
今天尝试了使用 QtCreator 里面的 device 方式打开调试 gdbserver。主要的时间花费在了找合适版本的 openssh 上,先后试了 openssh7.2p2 , openssh5.3p1, openssh5.8p1。。。最后终于,用 openssh5.8p1 中的 sshd 做服务器,可以让 CtCreator 中的 device 客户端连接上。就是这个版本的服务器反应有点慢,需要把 timeout 时间拉长一点。
device 的配置是在 options 里面进行的,我的如下:

配置好上面的 device,就可以在 debug->start debuging->start remote debug server... 选项卡,打开下面的界面,选择你要调试的进程,QtCreator 会自动的通过 ssh 通道调用 /usr/bin/gdbserver,将 gdbserver attach 到要调试的进程上去(通过 pid attach 到进程)。

使用这种方法,我们不用登录到设备内部,手动调用 gdbserver 去打开程序。。。(感觉好鸡肋 囧RZ)
QT Creator 环境使用 remote debug 调试 arm 程序的更多相关文章
- 【Qt开发】Qt Creator在Windows上的调试器安装与配置
Qt Creator在Windows上的调试器安装与配置 如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试 ...
- Qt Creator下应用CMake项目调试mex文件
网上可以找到很多应用Visual Studio编写.编译mex文件,并与MATLAB联合调试的文章.但这只限于Win平台,网上许多源码都是.mexa64的文件,它们的作者是怎么调试的呢?这里我介绍一下 ...
- Qt Creator在Windows上的调试器安装与配置
如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...
- 在QEMU中调试ARM程序【转】
转自:http://linuxeden.com/html/develop/20100820/104409.html 最近我想调试一个运行在QEMU模拟ARM系统中的Linux程序.我碰到过一些麻烦,因 ...
- [Qt Creator 快速入门] 第5章 应用程序主窗口
对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点 ...
- 在vscode中怎样debug调试go程序
随着互联网时代的飞速发展,我们编码使用的开发利器也在不断更新换代,古话说工欲善其事必先利其器,对于Java开发者而言,eclipse和idea这两款神器各有千秋,因自己的爱好可以选取不同的IDE,但是 ...
- 【转】Qt Creator在Windows上的调试器安装与配置
https://www.librehat.com/qt-creator-on-windows-debugger-installation-and-configuration/
- Ubuntu12.10 使用JLink连接开发板用arm-gdb调试ARM程序
Part1 环境搭建和工具安装 1.1 设置交叉编译环境 安装相关的编译工具: sudo apt-get install build-essential gcc-arm-linux-gnueabi 这 ...
- eclipse debug调试java程序的九个技巧
九个技巧: 逻辑结构 条件debug 异常断点 单步过滤 跳到帧 Inspect expressions display 远程debug 最早开始用eclipse的debug的时候,只会F5 F6 F ...
随机推荐
- Memcache的安装与配置
因为单位要求修复Memcached的DDOS漏洞,整理了本文.之前的文章防止Memcached的DDOS攻击另外一个思路 提到了解决方案,我们使用的版本较低,因此需要对 Memcached 进行升级, ...
- 概率校准与Brier分数
1.再提逻辑回归 前面已经讲过了逻辑回归,这里不再细讲,只是简单的说一个函数,主要是方便大家更好的理解概率校准. 在逻辑回归中,用的最多的就是sigmod函数,这个函数的作用就是把无限大或者无限小的数 ...
- UML类图和时序图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...
- WCF Ajax Json的应用
WCF Ajax 的应用网上实际上有很多, 如: Ajax与Wcf交互-JSON jQuery调用WCF服务传递JSON对象 WCF以Json格式返回对象,客户端以JS调用显示 关于SoapUI的介绍 ...
- pytorch之dataloader深入剖析
PyTorch学习笔记(6)——DataLoader源代码剖析 - dataloader本质是一个可迭代对象,使用iter()访问,不能使用next()访问: - 使用iter(dataloader) ...
- JQuery之ContextMenu(右键菜单)
插件下载地址:http://www.trendskitchens.co.nz/jquery/contextmenu/jquery.contextmenu.r2.js压缩版:http://www.tre ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十四)Structured Streaming:Encoder
一般情况下我们在使用Dataset<Row>进行groupByKey时,你会发现这个方法最后一个参数需要一个encoder,那么这些encoder如何定义呢? 一般数据类型 static ...
- AVR单片机最小系统 基本硬件线路与分析
单片机最小系统 单片机最小系统设计 AVR基本硬件线路设计与分析 (ATmega16功能小板) AVR DB-CORE Ver2.3 Atmega16开发板 本站商城提供本最小系统销售:99元 AV ...
- 原:wireshare使用技巧收集
/data/local/tcpdump -p -vv -s 0 -w /sdcard/ThinkDrive.pcap 先抓一个pcap的包. 1. 查看所有的链接与流量 统计->对话 这 ...
- 协程(Coroutine)并不是真正的多线程
自:http://www.zhihu.com/question/23895384 说到Coroutine,我们必须提到两个更远的东西.在操作系统(os)级别,有进程(process)和线程(threa ...