使用Qt Creator进行linux远程调试

转自 https://www.cnblogs.com/liushui-sky/p/9262897.html

使用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/

两台电脑(注意:本文以调试机和目标机作为区分描述)使用网线连接,相关情况如图所示:

image

正文

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的通用设备:

image

填入目标机的IP地址(局域网和公网IP均支持),root和密码:

image

SSH连通之后的表现:

image
image

配置远程调试和编译的环境,自定义命名为“firecatTest”:

image

4、新建一个Non-Qt Project做测试验证,Non-Qt Project就是指非Qt库的编程,即原生态的Linux C/C++编程。

image

Kit Selection要选择“firecatTest”:

image

如果是采用qmake编译方式,需要在工程的.pro文件加入以下几句话:

远程部署,定义编译生成的文件在远程linux目标机的路径,路径可以自定义

target.path=/home/firecat/Test

INSTALLS += target

image

编译,运行,大功告成!会在目标机/home/firecat/Test路径下生成执行文件mywin32。

如果采用cmake方式,文章末尾会讲述方法。

image

5、怎么远程单步调试?前提条件先要关闭Linux目标机的防火墙。

CentOS 7操作防火墙的命令是:

firewall-cmd --state #查看防火墙是否启用

systemctl stop firewalld #关闭防火墙

关闭防火墙之后怎么办?如何实现单步断点调试?记得文章步骤2描述的,要在目标机安装好gdb和gdbserver。然后,

方法一(推荐):简单明了,在调试机的工程源码下好断点,直接按F5,采用默认方式单步调试。

image

方法二(不推荐):复杂很多。

(1)在Linux目标机终端运行gdbserver命令:

/usr/local/bin/gdbserver 172.16.6.166:9900 /home/firecat/Test/mywin32

其中172.16.6.166是调试机的IP地址,9900是随意定的TCP端口号,mywin32是编程生成的目标执行文件。

image

(2)在Linux调试机上,设置Qt单步调试的参数:

Qt Creator菜单->Debug->Start Debugging->Attach to Running Debug Server

image

其中,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. project(untitled)

  3. add_executable(${PROJECT_NAME} "main.cpp" "test.cpp")

  4. SET(EXECUTABLE_OUTPUT_PATH "/home/firecat/test/")

  5. SET(EXECUTABLE_OUTPUT_PATH "/hellotest/12/34")

    转自:https://blog.csdn.net/libaineu2004/article/details/62423830

    注:wsj---windows下qtcreator虽然能够连上linux,但是不能将程序传送过去,也不能调试。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容