版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/libaineu2004/article/details/62423830

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/62423830

序言

考虑到程序员在无桌面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目标机的路径,路径可以自定义(也可以什么都不写,使用默认值,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"文件夹。

  1.  
    cmake_minimum_required(VERSION 2.8)
  2.  
     
  3.  
    project(untitled)
  4.  
    add_executable(${PROJECT_NAME} "main.cpp" "test.cpp")
  5.  
    ##SET(EXECUTABLE_OUTPUT_PATH "/home/firecat/test/")
  6.  
    SET(EXECUTABLE_OUTPUT_PATH "/hellotest/12/34")

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/62423830

使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和gdb调试(一台电脑有桌面系统,一台电脑无桌面系统)的更多相关文章

  1. 使用Qt Creator进行linux远程调试

    序言 考虑到程序员在无桌面Linux的环境下编写C/C++程序,如果使用原生的Vim编辑和单步断点调试比较麻烦,不利于新手使用,所以笔者尝试使用Qt实现两台Linux电脑远程部署和调试.即程序员在调试 ...

  2. Linux上使用Qt Creator进行C/C++开发

    目录[-] 1.安装Qt Creator和基础构建环境(以Ubuntu为例): 2.把自动完成快捷键"Ctrl+空格"改为"Alt+/"或者"Shif ...

  3. Qt Creator的下载和安装

    原文:https://blog.csdn.net/weixin_38090427/article/details/83827678 一,Qt和Qt Creator的区别 Qt是C++的一个库,或者说是 ...

  4. Qt Creator 的下载与安装

    一.Qt和Qt Creator的区别 Qt是C++的一个库,或者说是开发框架,里面集成了一些库函数,提高开发效率. Qt Creator是一个IDE,就是一个平台,一个开发环境,类似的比如说VS,也可 ...

  5. 【ARM-Linux开发】【Qt开发】Qt Creator自定义编译运行步骤

    原文:http://www.linuxidc.com/Linux/2015-04/115763.htm 一直用Qt Creator开发.无它,只是因为linux下C++ IDE选择不多.同时因为我抛弃 ...

  6. qt creator源码全方面分析(3-2)

    目录 qtcreator.pri 判断重复包含 定义版本信息 VERSION 定义IDE名称 启用C++14 CONFIG 自定义函数 Replace Functions Test Functions ...

  7. Qt环境搭建(Qt Creator)+Visual Studio

    1.http://www.cnblogs.com/ranjiewen/p/5318768.html 简述 经常有人问我编写Qt程序时使用什么IDE,其实这个真的很难回答(各有所长),只能说看个人爱好了 ...

  8. qt creator源码全方面分析(2-3)

    目录 External Tool Specification Files 文件名 位置 文件格式 主要标签 描述标签 可执行规范标签 示例 External Tool Specification Fi ...

  9. Qt环境搭建(Qt Creator)

    简述 上一节中介绍了如何进行Qt和Visual Studio的下载安装,随后演示了如何将Qt集成到Visual Studio中,并完成了我们第一个Qt小程序-Hello World.下面主要讲解如何利 ...

随机推荐

  1. ORA-00001:unique constraint violated解决

    转自:https://www.2cto.com/database/201211/172340.html ORA-00001:unique constraint violated解决 今天往数据库中插入 ...

  2. FreeRTOS config开始的宏

    FreeRTOSConfig.h系统配置文件中可以自定义,FreeRTOS.h中定义默认值 configAPPLICATION_ALLOCATED_HEAP 默认情况下FreeRTOS的堆内存是由编译 ...

  3. fatfs源码阅读

    使用fatfs文件的第一步,就是调用F_mount函数注册一个工作空间. F_mount函数的原型如下: 第一个参数根据网上大神的答复,是外设类型,如果是sd卡就是0,flash等等其他的外设就是其他 ...

  4. [LeetCode] 1029. 两地调度 ☆(贪心)

    官方题解 作差排序 描述 公司计划面试 2N 人.第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]. 返回将每个人都飞到某座城市的最低费用,要求每个 ...

  5. Android笔记(十八) 下拉列表(Spinner)

    App中常用的控件——下拉列表(Spinner),提供特定选择供用户选择 Spinner每次只能选择一个部件,它的选项来自于与之相关联的适配器(apater)中. MainActivity.java ...

  6. Android笔记(八) Android中的布局——相对布局

    RelativeLayout又称为相对布局,也是一种常用的布局形式.和LinearLayout的排列规则不同,RelativeLayout显得更加随意一下,它通常通过相对定位 的方式让控件出现在布局的 ...

  7. 运维开发笔记整理-创建django用户

    运维开发笔记整理-创建django用户 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建普通用户 C:\Users\yinzhengjie\softwares\Pycharm ...

  8. 部署Nginx网站服务实现访问状态统计以及访问控制功能

    原文:https://blog.51cto.com/11134648/2130987 Nginx专为性能优化而开发,最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力,单个物 ...

  9. linux网络编程之system v信号量(一)

    今天起,学习信号量相关的知识,下面开始: 关于信号量,在前面已经介绍过了,这里回顾一下: 通过上面的描述,很容易就能想到信号量的一上数据结构: 下面再来回顾一下P.V原语: 所谓的原语就是指这段代码是 ...

  10. JDBC-DBUtils工具-[课本293]-ResultSetHander接口的三种实现类的BeanHander/BeanListHander/ScalarHander

    ---恢复内容开始--- ResultSetHander接口 1.使用BeanHandler()只返回第一行结果集 ,封装到一个对应的JavaBean中 ;eg: User user=(User)bd ...