http://ftp.gnu.org/gnu/gdb/
在目标机器(linux)和前一步的MSYS里编译
PS:一定要使用GDB-7.10以上版本,对远程编译支持更好
双方的GDB版本必须一致否则出现各种问题,32位GDB可以调试64位GDBSERVER,但反过来不行
https://sourceforge.net/projects/mingw/files/OldFiles/mingw-get-inst/mingw-get-inst-20120426/
安装mingw32-base、mingw32-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位。
在https://www.eclipse.org/downloads/上面下载Eclipse IDE for C/C++ Developers的Windows 64 Bit版本,下载后的文件是eclipse-cpp-neon-1a-win32-x86_64.zip。解压下载的压缩包,双击目录中的eclipse.exe文件,即可运行Eclipse
[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
关闭防火墙: sudo service iptables stop
关闭selinux
vi /etc/sysconfig/selinux
SELINUX=disabled
重启机器
启动SAMBA服务:sudo service smb start
一定要在共享文件夹建立项目否则调试时无法打断点
g++ -g -o HelloWorld HelloWorld.cpp
一定要加-g选项,否则没有调试信息不能调试。
启动方式:gdbserver ip:port app
installDir/bin/Gdbserver 192.168.1.1:12345 ./HelloWorld
在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的远程调试。
在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就可以执行完子函数余下部分,并返回上一层。
由于不同的项目需求,有时候需要将代码编译成动态链接库而不是可执行文件,通过运行一个可执行程序来调用生成的库,这时候需要将可执行文件放到samba目录中与代码和编译出来的库一起。
C/C++Application填写可执行程序名(如果工程中没有该文件不能进行调试)
由于是编译成动态库,所以没有main函数,将停止点设置为动态库的入口函数(根据实际情况填写)。
开始调试时会eclipse提示找不到动态库,此时需要将可执行文件(icebox)以及动态库(libtsd.so)所需要的所有库文件拷贝到工程目录下。
在工程目录下建一个lib文件夹,将需要的库文件拷贝进去,右键工程选择refresh一下。