Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver

来源:互联网 发布:网络音乐的主要格式是 编辑:程序博客网 时间:2024/06/12 20:15

转自:http://www.heimizhou.com/windows-remote-debug-linux-c-plus-plus.html

最近有一个需求,就是需要在Windows上远程调试Linux上的C++程序,然后我就从网上搜集各种方法,但是发现很多方法中是先在Windows上编译程序,然后再从Linux上编译程序,最后进行远程调试,这种方法使我的调试不能进入源代码,后来经过尝试发现只需要在Linux上编译程序即可。下面从三个方面:需要安装的软件、安装与配置、配置远程调试,来介绍一下我的方法流程。

1. 需要安装的软件

所用平台的操作系统版本分别是:
(1) Windows:Windows 7 旗舰版 (32位)
(2) Linux:Ubuntu 12.04 LTS (32位)
具体需要安装的软件如表1-1所示。

表1-1 需要安装的软件
表1-1

2. 安装与配置

2.1 Windows安装MinGW

2.1.1 安装MinGW Installation Manager

从http://sourceforge.net/projects/mingw/files/上,下载mingw-get-setup.exe,双击打开如图2-1所示的界面,点击“Install”按钮,安装MinGW Installation Manager。

图2-1图2-1 安装MinGW Installation Manager

2.1.2 安装编译器、调试器、MSYS等

在MinGW Installation Manager窗口中,选择安装如下选项,具体如图2-2所示。
(1) mingw32-base:包含GCC、C编译器、GDB等。
(2) mingw32-gcc-g++:包含C++编译器等。
(3) msys-base:精简的MSYS。
选择图中“Installation”选项下的“Apply Changes”,安装勾选项。

图2-2图2-2 在MinGW上安装相关的环境

2.1.3 环境变量设置

针对MinGW进行环境变量设置。右键点击“计算机”,选择“高级系统设置”,在弹出的窗口中,选择“高级”选项卡,点击界面中的“环境变量”按钮,如图2-3所示。

图2-3图2-3 环境变量设置位置

在系统变量中,找到“Path”变量,点击“编辑”按钮,如果没有“Path”变量,点击“新建”按钮,在变量值最后加上C:\MinGW\bin的路径,即MinGW安装目录下的bin目录,记得用“;”与其他变量值隔开,如图2-4所示。

图2-4图2-4 设置环境变量Path

环境变量设置完成后,打开命令行,输入gdb并回车,如果进入GDB调试界面,并显示GDB版本号,说明MinGW的安装和环境变量设置成功。如图2-5所示。

图2-5图2-5 进入GDB调试界面

2.2 Windows安装Eclipse

2.2.1 下载安装JDK

当前是在http://www.oracle.com/technetwork/java/javase/downloads/index.html上面下载JDK安装包,如图2-6所示,当前下载后的文件是jdk-8u20-windows-i586.exe。下载完成后进行JDK安装,其中包含了JRE的安装。

图2-6图2-6 下载JDK

2.2.2 下载Eclipse

在https://www.eclipse.org/downloads/上面下载Eclipse IDE for C/C++ Developers的Windows 32 Bit版本,如图2-7所示,下载后的文件是eclipse-cpp-luna-R-win32.zip。解压下载的压缩包,双击目录中的eclipse.exe文件,即可运行Eclipse。

图2-7图2-7 下载Eclipse

2.3 Linux安装配置Samba

2.3.1 安装Samba

在Terminal中,输入sudo apt-get install samba,执行画面如图2-8所示。

图2-8图2-8 执行sudo apt-get install samba

安装完成后,输入sudo apt-get install smbfs,执行画面如图2-9所示。

图2-9图2-9 执行sudo apt-get install smbfs

2.3.2 创建共享目录

创建共享目录,输入以下命令,目录可以根据自己的需求更换。

2.3.3 备份并编辑smb.conf

搜寻这一行文字:

用下面这两行取代:

将下列几行新增到文件的最后面,假设允许访问的用户为:testshare。而文件夹的共享目录为/home/transplant/Share

然后顺便把这里改一下,找到[global],把workgroup=WORKGROUP改成:

2.3.4 添加网络访问账户

现在要添加testshare这个网络访问账户。如果在当前系统中没有这个账户,那么在Terminal中输入:

要注意,上面只是增加了testshare这个用户,却没有给用户赋予本机登录密码。所以这个用户只能从远程访问,不能从本机登录。而且samba的登录密码可以和本机登录密码不一样。
现在要新增网络使用者的账号,在Terminal中输入:

在新建立的文件内加入下面这一行并保存

2.3.5 重启smbd

重启一下smbd,在Terminal中输入:

看一下smbd监听的端口,如果显示相应的端口就代表启动成功,在Terminal中输入:

2.4 Linux安装GDBserver

Ubuntu 12.04 LTS上默认有GDB调试工具,但是没有GDBserver,所以需要进行安装。在Terminal中,输入sudo apt-get install gdbserver,具体的安装执行画面如图2-10所示。

图2-10图2-10 执行sudo apt-get install gdbserver

3. 配置远程调试

3.1 Windows上映射共享文件夹

打开计算机,点击“映射网络驱动器”按钮,如图3-1所示。

图3-1图3-1 选择映射网络驱动器

在弹出的“映射网络驱动器”窗口的文件夹中,输入\\192.168.6.6\Share,其中IP地址是第2.3节中进行共享文件夹配置的Linux操作系统的IP地址,Share是共享文件夹配置的目录,具体如图3-2所示,然后点击“完成”按钮。

图3-2图3-2  映射网络驱动器

在弹出的“Windows安全”窗口中,输入第2.3.4小节设置的用户名和密码,如图3-3所示,然后点击“确定”按钮,会弹出如图3-4所示的窗口,目录下默认没有文件。

图3-3图3-3 输入访问共享文件夹的用户名和密码

图3-4图3-4 访问Linux上的共享文件夹目录

3.2 Eclipse建立远程C++项目

3.2.1 切换工作目录

打开Eclipse,将工作目录切换到Linux共享文件夹下的目录,如图3-5所示。

图3-5图3-5 切换Eclipse的工作目录

3.2.2 新建C++项目

如图3-6所示,其中“Project type”选择“Makefile Project”下的“Empty Project”,“Toolchains”选择“MinGW GCC”,点击“Next”按钮,然后,点击“Finish”按钮完成新项目的创建。

图3-6图3-6 新建C++项目

3.2.3 新建源码和makefile文件

首先,新建源文件。右键点击新建的“HelloWorld”项目,选择“New”下面的“Source File”,新建HelloWorld.cpp源文件,输入以下代码:

然后,创建makefile文件,右键点击新建的“HelloWorld”项目,选择“New”下面的“Source File”,新建makefile文件,输入以下代码:

3.3 Linux启动GDBserver

3.3.1 编译C++程序

给新建的Eclipse工作目录授予读写权限,并切换到新建的C++项目所对应的目录,在Terminal中输入:

编译C++程序,在Terminal中输入:

编译生成HelloWorld可执行文件和*.o文件。

3.3.2 启动C++程序调试服务器

通过GDBserver启动C++程序调试服务器,在Terminal中输入:

这样就创建了HelloWorld程序的进程,并且调试服务器开始监听12345端口。其中IP地址和端口可以根据具体需求进行修改。

3.4 Windows远程调试C++程序

3.4.1 进行C++项目调试配置

在Eclipse中,右键点击HelloWorld项目,选择“Refresh”更新项目。然后右键点击HelloWorld项目,选择“Debug As”中的“Debug Configurations…”。在弹出的“Debug Configuration”窗口中,选择新建“C/C++ Remote Application”,如图3-7所示。

图3-7图3-7 新建C/C++ Remote Application

新建完成后,在图3-8的“C/C++ Application”中输入HelloWorld,然后点击下方的“Select other…”,弹出如图3-9所示的窗口,勾选窗口中的“Use configuration specific settings”,在“Launchers”中选择“GDB (DSF) Manual Remote Debugging Launcher”,然后点击“Change Workspace Settings…”,弹出如图3-10所示的窗口,在“C/C++ Remote Application [Debug]”中勾选“GDB (DSF) Manual Remote Debugging Launcher”,点击“Apply”按钮和“OK”按钮,返回到图3-9所示的窗口,点击“OK”按钮,返回到图3-8所示的窗口,选择“Disable auto build”。

图3-8图3-8 Debug Configuration窗口

图3-9图3-9 Select Preferred Launcher窗口

图3-10图3-10 Preferences (Filtered)窗口

然后,选择“Debugger”选项卡,在“Debugger Options”中选择“Connection”选项卡,输入Linux上GDBserver的IP和端口号,如图3-11所示。最后,点击“Apply”按钮以及“Debug”按钮,进行远程调试。

图3-11图3-11 Debugger Connection

C++程序远程调试起来后,Windows上的Eclipse中默认在程序的main函数处中断,如图3-12所示。Linux上的GDBserver会通过监听端口,发现来自Windows的远程调试,如图3-13所示。

图3-12图3-12 程序在HelloWorld的main函数处中断

图3-13图3-13 Linux监听远程调试端口

3.4.2 增加断点进行远程调试

在Eclipse中,找到需要加断点的行,右键点击该行,选择“Toggle Breakpoint”,给该行增加断点,如图3-14所示。

图3-14图3-14 给代码增加断点

点击Resume按钮,可以使程序运行到新增的断点处,如图3-15所示。然后,可以通过Eclipse工具栏上的“Step Into”、“Step Over”、“Step Return”等按钮,进行多种调试。
(1) “Step Into (F5 )”:单步执行,遇到子函数就进入并且继续单步执行。
(2) “Step Over (F6)”:在单步执行中,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。
(3) “Step Return”:在单步执行到子函数内时,用step return就可以执行完子函数余下部分,并返回上一层。

图3-15图3-15 运行至断点

4. 总结

本文主要介绍在Windows上使用Eclipse开发环境来远程调试Linux上的C++程序的方法流程,本文是从需要安装的软件、安装与配置、配置远程调试三个方面展开进行的介绍。本文中的方法也存在一定的缺陷,主要是没有实现通过Eclipse对C++程序进行远程自动编译,需要通过远程桌面或telnet来对C++程序进行手动make编译。本文所提及到的软件版本都是文档撰写时期所使用的软件版本。

5. 参考资料

[1] http://blog.csdn.net/txk1452/article/details/7603272
[2] http://blog.csdn.net/xukai871105/article/details/9297027
[3] http://www.cnblogs.com/foxhengxing/archive/2010/08/14/1799774.html

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 购房发票字体不清晰怎么办 接到客人电话预定时怎么办 产检资料弄丢了怎么办 工作中同事喜欢争风头怎么办 想出卖身体赚钱了怎么办 孩子生下来不想要了怎么办 舌头被铁管冻住怎么办 人被水泥冻住了怎么办 姑娘果孕妇吃了怎么办 纹身后吃了辣的怎么办 怀孕五个多月不想要了怎么办 失业后又干保安档案怎么办 前列大腺脓肿要怎么办 小动物死了孩子很伤心怎么办 向客人开错房间怎么办 工伤认定没有证人证言怎么办? 一个月没来月经怎么办14岁 刮了胡子下巴痒怎么办 月经多怎么办喝什么好 大姨妈不调怎么办来了 多人被骗没证据怎么办 一直坏肚子拉水怎么办 犯人在监狱有高危高血压怎么办 丈夫出轨他死都不承认怎么办 没写欠条的债该怎么办 被尾随回家知道住处怎么办 微信记录全没了怎么办 微信记录没有了怎么办 ipad登录不了下不了软件怎么办 苹果手机打开自动时间不对怎么办 魅族手机时间不同步怎么办 小米手环时间不准怎么办 电脑网络dns配置错误怎么办 去泰国手机要打电话怎么办 苹果6s音量小怎么办 三星0n7充电慢怎么办 在国外接受不到验证码怎么办 ip地址错误网络无法连通怎么办 注册微信收不到验证码怎么办 安卓手机收不到短信怎么办 手机被短信验证码轰炸怎么办