使用Qt Creator进行linux远程调试
序言
考虑到程序员在无桌面Linux的环境下编写C/C++程序,如果使用原生的Vim编辑和单步断点调试比较麻烦,不利于新手使用,所以笔者尝试使用Qt实现两台Linux电脑远程部署和调试。即程序员在调试电脑使用Qt编写代码,然后把目标程序部署在正式电脑上。本篇目的是帮助大家摆脱vim,一劳永逸,解决痛点。请读者不要误以为Qt Creator只能用来做桌面软件的,其实它也可以新建纯C/C++非桌面的工程,既可以qmake也可以cmake编译。准备两台电脑做验证,一台有Linux桌面系统,使用Qt Creator用于编辑源码调试环境,另一台只有终端,无Linux桌面系统,用于服务器正式环境。Qt Linux版本安装在调试机。本文以qt-opensource-linux-x64-5.7.1.run为例。Qt下载网址是:http://download.qt.io/official_releases/qt/
两台电脑(注意:本文以调试机和目标机作为区分描述)使用网线连接,相关情况如图所示:
正文
1、确保在Linux调试机安装了gcc和gdb。
不会安装的请参考以下文章:
http://www.linuxidc.com/Linux/2015-01/112057.htm
http://blog.csdn.net/yang1982_0907/article/details/38461127
注意事项:
必须安装有了gcc才能编译gdb。CentOS 7自动安装gcc的命令是:yum -y install gcc make glibc
安装完gcc,执行终端命令gcc -v可以查看安装的版本信息。CentOS 7默认的gcc版本是V4.8.5。
CentOS 7查看ip地址的命令是:ip addr
下载gdb源码的网址是:http://ftp.gnu.org/gnu/gdb/ 编译gdb源码之前,必须安装Texinfo文档系统。否则,编译gdb源码时会报错configure: error: no termcap library found。
以CentOS 7为例,安装命令是yum install ncurses-devel
以源码gdb-7.6.1.tar.gz为例,执行命令tar xzvf gdb-7.6.1.tar.gz解压之后,在一级目录/gdb-7.6.1/,执行以下命令编译:
cd gdb-7.6.1
./configure
make
make install
然后会在路径/usr/local/bin/生成gdb文件,执行终端命令gdb -v可以查看安装的版本信息。
2、在Linux目标机安装gdb和gdbserver
调试机和目标机的gdb版本必须一致。编译方法一致。
以源码gdb-7.6.1.tar.gz为例,执行命令tar xzvf gdb-7.6.1.tar.gz解压之后,在一级目录/gdb-7.6.1/,执行以下命令编译:
cd gdb-7.6.1
./configure
make
make install
然后会在路径/usr/local/bin/同时生成gdb和gdbserver文件。
目标机的gdbserver至关重要,没有它就无法单步断点调试!切记!验证gdb和gdbserver安装正确的方法是:
执行终端命令
gdb -v
gdbserver --version
如果都能正确显示版本号,说明安装成功!
如果是想单独编译gdbserver(注:我们这里不需要再执行这步骤,因为上面的方法已经包含了),则需要进入/gdb-7.6.1/gdb/gdbserver, 执行以下命令编译:
./configure
make
make install
然后会在路径/usr/local/bin/生成gdbserver文件,执行终端命令gdbserver --version可以查看安装的版本信息。
3、在Linux调试机设置目标机的信息
Qt Creator菜单->Tools->Options->Devices->Add
新建Linux的通用设备:
填入目标机的IP地址(局域网和公网IP均支持),root和密码:
SSH连通之后的表现:
配置远程调试和编译的环境,自定义命名为“firecatTest”:
4、新建一个Non-Qt Project做测试验证,Non-Qt Project就是指非Qt库的编程,即原生态的Linux C/C++编程。
Kit Selection要选择“firecatTest”:
如果是采用qmake编译方式,需要在工程的.pro文件加入以下几句话:
#远程部署,定义编译生成的文件在远程linux目标机的路径,路径可以自定义
target.path=/home/firecat/Test
INSTALLS += target
编译,运行,大功告成!会在目标机/home/firecat/Test路径下生成执行文件mywin32。
如果采用cmake方式,文章末尾会讲述方法。
5、怎么远程单步调试?前提条件先要关闭Linux目标机的防火墙。
CentOS 7操作防火墙的命令是:
firewall-cmd --state #查看防火墙是否启用
systemctl stop firewalld #关闭防火墙
关闭防火墙之后怎么办?如何实现单步断点调试?记得文章步骤2描述的,要在目标机安装好gdb和gdbserver。然后,
方法一(推荐):简单明了,在调试机的工程源码下好断点,直接按F5,采用默认方式单步调试。
方法二(不推荐):复杂很多。
(1)在Linux目标机终端运行gdbserver命令:
/usr/local/bin/gdbserver 172.16.6.166:9900 /home/firecat/Test/mywin32
其中172.16.6.166是调试机的IP地址,9900是随意定的TCP端口号,mywin32是编程生成的目标执行文件。
(2)在Linux调试机上,设置Qt单步调试的参数:
Qt Creator菜单->Debug->Start Debugging->Attach to Running Debug Server
其中,Server Port指的是TCP端口,Server address指的是目标机的IP地址;
Local executable指的是工程在本地(调试机)的生成文件。
参数设置完毕,点击ok按钮,开始调试!!
6、如果不想使用qmake,而是cmake编译和调试程序,怎么实现?请访问姊妹篇《使用Qt Creator作为Linux IDE,实现CMake编译和单步调试》,网址是:
http://blog.csdn.net/libaineu2004/article/details/78448392
注意:CMake远程生成的目标路径,默认是/root/xxx。可以手动修改CMakeLists.txt文件更改输出路径,SET(EXECUTABLE_OUTPUT_PATH "***").如此一来开发机和目标机的路径都会有生成结果。我的实测结果是,貌似路径里面有home目录,目标机就不行?例如SET(EXECUTABLE_OUTPUT_PATH "/home/12/"),结果文件开发机在,但是目标机并不在,而是会在根目录生成/12的文件夹。再比如"/home/firecat/test"目标机也不在,而是根目录下生成"test"文件夹。
- cmake_minimum_required(VERSION 2.8)
- project(untitled)
- add_executable(${PROJECT_NAME} "main.cpp" "test.cpp")
- ##SET(EXECUTABLE_OUTPUT_PATH "/home/firecat/test/")
- SET(EXECUTABLE_OUTPUT_PATH "/hellotest/12/34")转自:https://blog.csdn.net/libaineu2004/article/details/62423830注:wsj---windows下qtcreator虽然能够连上linux,但是不能将程序传送过去,也不能调试。
使用Qt Creator进行linux远程调试的更多相关文章
- 使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和gdb调试(一台电脑有桌面系统,一台电脑无桌面系统)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/libaineu2004/article/details/62423830 尊重作者,支持原创,如 ...
- 解决QT Creator在Linux下的输入法问题
https://vjudge1.github.io/2014/04/02/type-chinese-in-linux/http://blog.csdn.net/ubuntutouch/article/ ...
- How to configure CDB in Qt Creator(使用VC调试器)
I was having the same problems too, and finally figured out how to solve this. Styne666 gave me a hi ...
- Ubuntu中Qt Creator无法启动调试
Ubuntu下安装Qt creator后无法启动调试,报错为Ptrace:Operation not permitted. 产生原因: 在Ubuntu 11.04("Natty Narwha ...
- [转载]ROS开发环境之Qt Creator
ROS开发环境之Qt Creator(http://my.phirobot.com/blog/2013-12-ros_ide_qtcreator.html) Created at: 2013-12-2 ...
- Qt creator使用笔记
设置头文件的搜索路径编辑项目文件 xxx.pro INCLUDEPATH = /src/doip \ /src/doip/utils \ /src/doip/pduR \ /src/doip/uds1 ...
- Qt Creator调试
与调试器交互的几种方法: 1.单行运行或者单指令运行 2.中断程序运行 3.设置断点 4.检查调用栈空间的内容 5.检查并修改局部或者全局变量 6.检查并修改被调试程序的寄存器和内存内容 7.检查装载 ...
- Qt Creator + MinGW 在windows 下的调试GDB停止工作解决
Qt的安装配置请参考本博客本分类下的其他相关文章,本文主要整理在调试时候遇到的问题和解决方法供遇到同样问题的同学参考.由于我之前也没有任何Qt的开发基础,做的也是硬件方面设计,所以这方面基础还是比较薄 ...
- Qt Creator下应用CMake项目调试mex文件
网上可以找到很多应用Visual Studio编写.编译mex文件,并与MATLAB联合调试的文章.但这只限于Win平台,网上许多源码都是.mexa64的文件,它们的作者是怎么调试的呢?这里我介绍一下 ...
随机推荐
- BZOJ.1443.[JSOI2009]游戏Game(二分图博弈 匈牙利)
题目链接 \(Description\) 一个\(N*M\)的有障碍的棋盘,先手放置棋子后,从后手开始轮流移动棋子,不能走重复的位置,不能移动的输.求在哪些位置放棋子是先手必胜的. \(Solutio ...
- COGS.264.数列操作(分块 单点加 区间求和)
题目链接 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> u ...
- win7 64位系统彻底卸载mysql
一.在控制面板中卸载mysql软件,卸载后删除mysql安装目录下的所有文件 二.windows+R运行“regedit”文件,打开注册表 三.删除注册表:HKEY_LOCAL_MACHINE\SYS ...
- 标 题: [心得]传统IT转互联网面试经验分享
发信人: lgonnet (逃之夭夭), 信区: Java标 题: [心得]传统IT转互联网面试经验分享发信站: 水木社区 (Wed Jul 1 10:18:38 2015), 站内 统一回复一下 ...
- java中关于AtomicInteger的使用
在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicInteger则通过一种线程安全的加减操作接口.咳哟参考我之前写的一篇 ...
- Redis集群规范
Redis集群规范 什么是 Redis 集群 分布式(distributed) 容错(fault-tolerant) 是普通单机 Redis 所能使用的功能的一个子集(subset). 集群的容错功能 ...
- 屌丝也用按位与(&),按位或(|) (二)
上篇讲到了,用按位操作进行配置,下边来讲一个大神也在用的例子 linux的权限系统 我们知道一个文件,如果是777,那么是最高的权限,那这个七是咋构成的,我会告诉你是 4+2+1么? 我会告诉你,是1 ...
- Recover database using backup controlfile until cancel
http://searchoracle.techtarget.com/answer/Recover-database-using-backup-controlfile-until-cancel Wha ...
- JAVA中通过JavaCV实现跨平台视频/图像处理-调用摄像头
一.简介 JavaCV使用来自计算机视觉领域(OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, librealsense, CL PS3 E ...
- Shell脚本编程基础笔记二
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8177697.html 一:输入 1:运行时参数 可以在启动脚本时,在其后输入参数. ./脚本 参数1 参数2. ...