WINDOWS远程调试LINUX程序

1.下载gdb-7.11.tar.gz

http://ftp.gnu.org/gnu/gdb/

在目标机器(linux)和前一步的MSYS里编译

PS:一定要使用GDB-7.10以上版本,对远程编译支持更好

双方的GDB版本必须一致否则出现各种问题,32位GDB可以调试64位GDBSERVER,但反过来不行

 

2.下载mingw-get-inst-20120426.exe

 

https://sourceforge.net/projects/mingw/files/OldFiles/mingw-get-inst/mingw-get-inst-20120426/

 

安装mingw32-basemingw32-gcc-g++msys-base

 

 

 

安装完成后将MinGW安装目录下的bin目录设置环境变量

 

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

 

 

minGW编译GDB

进入C:\MinGW\msys\1.0运行msys.bat打开minGW模拟环境

拷贝gdb-7.11.tar.gz到当前用户目录(C:\MinGW\msys\1.0\home\tuxingkai

tar zxvf gdb-7.11.tar.gz

cd gdb-7.11

./configure --target=i686-pc-linux-gnu

#这一步很重要,根据目标机器(linux机器)指定类型,可以根据Linux上的gdb -v来写

make && make install

安装成功后将C:\MinGW\msys\1.0\local\bin目录下的i686-pc-Linux-gnu-gdb.exe拷贝至C:\MinGW\bin目录下

 

PS:目前只能使用该版本的MINGW,该版本可以编译GDB-7.11。由于目前大部分机器都是64位的,但MINGW一直保持32位。

 

 

 

3.安装eclipse

 

   https://www.eclipse.org/downloads/上面下载Eclipse IDE for C/C++ DevelopersWindows 64 Bit版本,下载后的文件是eclipse-cpp-neon-1a-win32-x86_64.zip。解压下载的压缩包,双击目录中的eclipse.exe文件,即可运行Eclipse

 

 

 

 

4.在Linux上安装semba

安装samba服务,命令:yum install samba(或者apt-get)

修改配置文件:vim /etc/samba/smb.conf;(提醒下修改某个文件时最好先备份下,这是个不错的习惯)把[homes]和[privnters]等都注释掉(也就是把======Share Definitions========下面的的 语句全注释掉)然后添加下面几行

[share]
  comment = share        // 共享的文件夹
  path = /home/share     // 共享文件的目录
  public = yes           // 是否公共属性
  writable = yes
  browseable=yes
  available=yes
  guest ok=yes
上面是设置共享目录,接下来设置下登录用户和权限
#security = user    // 注释掉原来的user
security = share   // 变成共享的

重启smbd
sudo service smbd restart
看一下smbd监听的端口,如果显示相应的端口就代表启动成功,在Terminal中输入:
sudo netstat -tlnp | grep smb

4.1注意事项

关闭防火墙: sudo service iptables stop

关闭selinux

vi /etc/sysconfig/selinux

SELINUX=disabled

重启机器

启动SAMBA服务:sudo service smb start

 

5.Windows上映射共享文件夹

 

 

 

 

6.eclipse在共享文件夹中建立项目HelloWorld

 

一定要在共享文件夹建立项目否则调试时无法打断点

 

7.LINUX编译项目

g++ -g -o HelloWorld HelloWorld.cpp

一定要加-g选项,否则没有调试信息不能调试。

8.LINUX安装GDB7.11后使用该版本的gdbserver启动项目

启动方式:gdbserver ip:port app

installDir/bin/Gdbserver 192.168.1.1:12345 ./HelloWorld

9.eclipse远程调试

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

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

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

 

9.1 增加断点进行远程调试

 

Eclipse中,找到需要加断点的行,右键点击该行,选择“Toggle Breakpoint”,给该行增加断点。

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

 

10.调试动态库

由于不同的项目需求,有时候需要将代码编译成动态链接库而不是可执行文件,通过运行一个可执行程序来调用生成的库,这时候需要将可执行文件放到samba目录中与代码和编译出来的库一起。

C/C++Application填写可执行程序名(如果工程中没有该文件不能进行调试)

由于是编译成动态库,所以没有main函数,将停止点设置为动态库的入口函数(根据实际情况填写)。

10.1注意事项

开始调试时会eclipse提示找不到动态库,此时需要将可执行文件(icebox)以及动态库(libtsd.so)所需要的所有库文件拷贝到工程目录下。

在工程目录下建一个lib文件夹,将需要的库文件拷贝进去,右键工程选择refresh一下。

即可完成设置。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值