Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver
2016-05-19 09:31
1251 查看
转自: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 需要安装的软件
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
安装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
在MinGW上安装相关的环境
2.1.3 环境变量设置
针对MinGW进行环境变量设置。右键点击“计算机”,选择“高级系统设置”,在弹出的窗口中,选择“高级”选项卡,点击界面中的“环境变量”按钮,如图2-3所示。
图2-3
环境变量设置位置
在系统变量中,找到“Path”变量,点击“编辑”按钮,如果没有“Path”变量,点击“新建”按钮,在变量值最后加上C:\MinGW\bin的路径,即MinGW安装目录下的bin目录,记得用“;”与其他变量值隔开,如图2-4所示。
图2-4
设置环境变量Path
环境变量设置完成后,打开命令行,输入gdb并回车,如果进入GDB调试界面,并显示GDB版本号,说明MinGW的安装和环境变量设置成功。如图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
下载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
下载Eclipse
2.3 Linux安装配置Samba
2.3.1 安装Samba
在Terminal中,输入sudo apt-get install samba,执行画面如图2-8所示。
图2-8
执行sudo apt-get install samba
安装完成后,输入sudo apt-get install smbfs,执行画面如图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安装GDBserverUbuntu 12.04 LTS上默认有GDB调试工具,但是没有GDBserver,所以需要进行安装。在Terminal中,输入sudo apt-get install gdbserver,具体的安装执行画面如图2-10所示。
图2-10 执行sudo apt-get install gdbserver3. 配置远程调试3.1 Windows上映射共享文件夹打开计算机,点击“映射网络驱动器”按钮,如图3-1所示。
图3-1 选择映射网络驱动器在弹出的“映射网络驱动器”窗口的文件夹中,输入\\192.168.6.6\Share,其中IP地址是第2.3节中进行共享文件夹配置的Linux操作系统的IP地址,Share是共享文件夹配置的目录,具体如图3-2所示,然后点击“完成”按钮。
图3-2 映射网络驱动器在弹出的“Windows安全”窗口中,输入第2.3.4小节设置的用户名和密码,如图3-3所示,然后点击“确定”按钮,会弹出如图3-4所示的窗口,目录下默认没有文件。
图3-3 输入访问共享文件夹的用户名和密码
图3-4 访问Linux上的共享文件夹目录3.2 Eclipse建立远程C++项目3.2.1 切换工作目录打开Eclipse,将工作目录切换到Linux共享文件夹下的目录,如图3-5所示。
图3-5 切换Eclipse的工作目录3.2.2 新建C++项目如图3-6所示,其中“Project type”选择“Makefile Project”下的“Empty Project”,“Toolchains”选择“MinGW GCC”,点击“Next”按钮,然后,点击“Finish”按钮完成新项目的创建。
图3-6 新建C++项目3.2.3 新建源码和makefile文件首先,新建源文件。右键点击新建的“HelloWorld”项目,选择“New”下面的“Source File”,新建HelloWorld.cpp源文件,输入以下代码:
然后,创建makefile文件,右键点击新建的“HelloWorld”项目,选择“New”下面的“Source File”,新建makefile文件,输入以下代码:
3.3 Linux启动GDBserver3.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
新建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
Debug Configuration窗口
图3-9
Select Preferred Launcher窗口
图3-10
Preferences (Filtered)窗口
然后,选择“Debugger”选项卡,在“Debugger Options”中选择“Connection”选项卡,输入Linux上GDBserver的IP和端口号,如图3-11所示。最后,点击“Apply”按钮以及“Debug”按钮,进行远程调试。
图3-11
Debugger Connection
C++程序远程调试起来后,Windows上的Eclipse中默认在程序的main函数处中断,如图3-12所示。Linux上的GDBserver会通过监听端口,发现来自Windows的远程调试,如图3-13所示。
图3-12
程序在HelloWorld的main函数处中断
图3-13
Linux监听远程调试端口
3.4.2 增加断点进行远程调试
在Eclipse中,找到需要加断点的行,右键点击该行,选择“Toggle Breakpoint”,给该行增加断点,如图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
运行至断点
4. 总结
本文主要介绍在Windows上使用Eclipse开发环境来远程调试Linux上的C++程序的方法流程,本文是从需要安装的软件、安装与配置、配置远程调试三个方面展开进行的介绍。本文中的方法也存在一定的缺陷,主要是没有实现通过Eclipse对C++程序进行远程自动编译,需要通过远程桌面或telnet来对C++程序进行手动make编译。本文所提及到的软件版本都是文档撰写时期所使用的软件版本。
5. 参考资料
[1] /article/8499745.html
[2] /article/2600890.html
[3] /article/6436023.html
最近有一个需求,就是需要在Windows上远程调试Linux上的C++程序,然后我就从网上搜集各种方法,但是发现很多方法中是先在Windows上编译程序,然后再从Linux上编译程序,最后进行远程调试,这种方法使我的调试不能进入源代码,后来经过尝试发现只需要在Linux上编译程序即可。下面从三个方面:需要安装的软件、安装与配置、配置远程调试,来介绍一下我的方法流程。
1. 需要安装的软件
所用平台的操作系统版本分别是:
(1) Windows:Windows 7 旗舰版 (32位)
(2) Linux:Ubuntu 12.04 LTS (32位)
具体需要安装的软件如表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
安装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
在MinGW上安装相关的环境
2.1.3 环境变量设置
针对MinGW进行环境变量设置。右键点击“计算机”,选择“高级系统设置”,在弹出的窗口中,选择“高级”选项卡,点击界面中的“环境变量”按钮,如图2-3所示。
图2-3
环境变量设置位置
在系统变量中,找到“Path”变量,点击“编辑”按钮,如果没有“Path”变量,点击“新建”按钮,在变量值最后加上C:\MinGW\bin的路径,即MinGW安装目录下的bin目录,记得用“;”与其他变量值隔开,如图2-4所示。
图2-4
设置环境变量Path
环境变量设置完成后,打开命令行,输入gdb并回车,如果进入GDB调试界面,并显示GDB版本号,说明MinGW的安装和环境变量设置成功。如图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
下载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
下载Eclipse
2.3 Linux安装配置Samba
2.3.1 安装Samba
在Terminal中,输入sudo apt-get install samba,执行画面如图2-8所示。
图2-8
执行sudo apt-get install samba
安装完成后,输入sudo apt-get install smbfs,执行画面如图2-9所示。
图2-9
执行sudo apt-get install smbfs
2.3.2 创建共享目录
创建共享目录,输入以下命令,目录可以根据自己的需求更换。
12 | mkdir /home/transplant/Sharechmod 777 /home/transplant/Share |
1 2 | sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup sudo gedit /etc/samba/smb.conf |
1 | # security = user |
1 2 | security = user username map = /etc/samba/smbusers |
123456789101112 | [Share]comment = Shared Folder with username and passwordpath = /home/transplant/Sharepublic = yeswritable = yesvalid users = testsharecreate mask = 0700directory mask = 0700force user = nobodyforce group = nogroupavailable = yesbrowseable = yes |
1 2 3 4 | workgroup = WORKGROUP display charset = UTF-8 unix charset = UTF-8 dos charset = cp936 |
现在要添加testshare这个网络访问账户。如果在当前系统中没有这个账户,那么在Terminal中输入:
1 | sudo useradd testshare |
现在要新增网络使用者的账号,在Terminal中输入:
1 2 | sudo smbpasswd -a testshare,然后输入密码123456 sudo gedit /etc/samba/smbusers |
1 | testshare = "network username" |
1 | sudo service smbd restart |
1 | sudo netstat -tlnp | grep smb |
图2-10 执行sudo apt-get install gdbserver3. 配置远程调试3.1 Windows上映射共享文件夹打开计算机,点击“映射网络驱动器”按钮,如图3-1所示。
图3-1 选择映射网络驱动器在弹出的“映射网络驱动器”窗口的文件夹中,输入\\192.168.6.6\Share,其中IP地址是第2.3节中进行共享文件夹配置的Linux操作系统的IP地址,Share是共享文件夹配置的目录,具体如图3-2所示,然后点击“完成”按钮。
图3-2 映射网络驱动器在弹出的“Windows安全”窗口中,输入第2.3.4小节设置的用户名和密码,如图3-3所示,然后点击“确定”按钮,会弹出如图3-4所示的窗口,目录下默认没有文件。
图3-3 输入访问共享文件夹的用户名和密码
图3-4 访问Linux上的共享文件夹目录3.2 Eclipse建立远程C++项目3.2.1 切换工作目录打开Eclipse,将工作目录切换到Linux共享文件夹下的目录,如图3-5所示。
图3-5 切换Eclipse的工作目录3.2.2 新建C++项目如图3-6所示,其中“Project type”选择“Makefile Project”下的“Empty Project”,“Toolchains”选择“MinGW GCC”,点击“Next”按钮,然后,点击“Finish”按钮完成新项目的创建。
图3-6 新建C++项目3.2.3 新建源码和makefile文件首先,新建源文件。右键点击新建的“HelloWorld”项目,选择“New”下面的“Source File”,新建HelloWorld.cpp源文件,输入以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; int i = 8; int j = 8; int k = i + j; cout << "k = " + k << endl; return 0; } |
1234567 | HelloWorld: HelloWorld.o g++ -o HelloWorld HelloWorld.oHelloWorld.o: HelloWorld.cpp g++ -c -g HelloWorld.cppclean: rm -f HelloWorld rm -f *.o |
1 2 | sudo chmod 777 /home/transplant/Share/Project –R cd /home/transplant/Share/Project/HelloWorld |
1 | make |
1 | gdbserver 192.168.6.6:12345 ./HelloWorld |
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
新建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
Debug Configuration窗口
图3-9
Select Preferred Launcher窗口
图3-10
Preferences (Filtered)窗口
然后,选择“Debugger”选项卡,在“Debugger Options”中选择“Connection”选项卡,输入Linux上GDBserver的IP和端口号,如图3-11所示。最后,点击“Apply”按钮以及“Debug”按钮,进行远程调试。
图3-11
Debugger Connection
C++程序远程调试起来后,Windows上的Eclipse中默认在程序的main函数处中断,如图3-12所示。Linux上的GDBserver会通过监听端口,发现来自Windows的远程调试,如图3-13所示。
图3-12
程序在HelloWorld的main函数处中断
图3-13
Linux监听远程调试端口
3.4.2 增加断点进行远程调试
在Eclipse中,找到需要加断点的行,右键点击该行,选择“Toggle Breakpoint”,给该行增加断点,如图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
运行至断点
4. 总结
本文主要介绍在Windows上使用Eclipse开发环境来远程调试Linux上的C++程序的方法流程,本文是从需要安装的软件、安装与配置、配置远程调试三个方面展开进行的介绍。本文中的方法也存在一定的缺陷,主要是没有实现通过Eclipse对C++程序进行远程自动编译,需要通过远程桌面或telnet来对C++程序进行手动make编译。本文所提及到的软件版本都是文档撰写时期所使用的软件版本。
5. 参考资料
[1] /article/8499745.html
[2] /article/2600890.html
[3] /article/6436023.html
相关文章推荐
- Linux驱动学习心得
- linux下samba4.1.6源代码部署及配置
- SUSE Linux 企业版的实时补丁将带来无中断的服务
- Linux新建用户误删除进入时su: warning: cannot change directory to /home/grid: No such file or director
- Linux---centos升级git版本
- (转) Weblogic 10完美破解(Linux和Windows都适用)
- centos 设置定时任务执行指定脚本
- CentOS 开机启动服务及自动联网
- CentOS 6.3图形界面自定义开启终端快捷键
- centos 下安装PHP框架 Phalcon
- CentOS7 安装chrome浏览器
- Linux-python 安装,学习
- Linux strace命令
- 通过Python控制嵌入式Linux
- find 命令详解
- 基于FS4412嵌入式系统移植(2) NFS文件系统启动linux体验
- centos7 内核3.10 升级到4.3.3
- Linux集群不得不知的强大功能!
- linux下使用yum安装mysql
- linux脚本编写小练习