Date: 2017-08-17
Author: Kagula
Environment:
[1]
msys64
[2]Target端 地址192.168.2.152
GNU gdbserver (GDB) 7.11
C:\msys64\mingw32\bin\gdbserver.exe
[3]Host端 地址192.168.2.111
C:\msys64\mingw32\bin\gdb.exe
[4]微软的Debug工具,本文未用到。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe
[5]
QT Creator 3.5.1
[6]Qt 5.6
C:\Qt\Qt5.6.0_Mingw\bin
[7]Target机器 Win7 OS
Host机器 Win10 OS
Introduction:
介绍如何在Windows10 Qt Creator,远程调试Windows7上运行的Qt程序。
Content:
GDB调试环境由
Host和
Target两部分组成,Host端使用
gdb命令,Target端使用
gdbserver命令。
调试时,应用程序在目标系统(可以是嵌入式设备)上运行,而gdb调试在Host端。
Host、Target之间通过 TCP/IP 进行通信,协同完成 bin 文件的调试;
二者都使用共同的 symbol 库,QtCreator 负责解析,gdbserver 负责抓取symbol和寄存器值。
第一步:建一个HelloWorld Qt Console项目用来验证远程调试的可行性。
源代码清单如下:
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
//QCoreApplication a(argc, argv);
qDebug() << "Hello, world from qDebug!";
cout << "Hello,World from std::cout!" << endl;
cin.get();
return 0;//return a.exec();
}
第二步:Target端
Step1:
Host端Debug模式编译出
HelloWorld.exe后把程序放到Target端,确保程序能够运行。
假设源文件路径
D:\workspace_qt\build-HelloWorld-Mingw32-Debug\debug
从这个路径中把新生成HelloWorld.exe放到Target机器上新建的
qt5_debug目录。
同时也要把
C:\msys64\mingw32\bin
路径下,下面四个文件复制到目标目录
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
zlib1.dll
把Host机器
C:\Qt\Qt5.6.0_Mingw\bin下面所有的
*d.dll复制到Target机器qt5_debug目录,
现在目录下已经能运行HelloWorld.exe,而不会出现提示少哪个库。
Step Last:
把C:\msys64\mingw32\bin目录中的
gdbserver.exe复制到Target端qt5_debug目录,
在命令行下输入下面的命令
gdbserver 192.168.2.111:2345 HelloWorld
其中192.168.2.111是Host端的地址,2345为侦听端口,HelloWorld为应用程序名。
最后一步: host端单步跟踪
Step 1:Host端设置Debugger配置信息
QT Creator
Tools->Options->Debugger->GDB->Additional Startup Commands输入框中
输入“共享库搜索路径”设置:
set sysroot C:\Qt\Qt5.6.0_Mingw\bin;C:\msys64\mingw32\bin;C:\Windows\syswow64
Last Step:
配置 QtCreator->debug->start debuging->attached to remote debug server...
输入IP地址、端口和待调试文件路径:
“
Local executable”是你要调试的exe程序的本地路径,必须要输入,
“Command line arguments:”指的是你HelloWorld程序需要的命令行参数,所以这里我们不需要填
点击[
OK]后,进入程序断点,验证“远程单步跟踪”成功。
补充:
[1]QT Creator Debug状态下,主菜单可以通过下面的路径Window->Views->Debugger Log
打开Debugger Log窗口,查看GDB日志。
[2]如果不设置
sysroot,shared library会从target往host回传,导致启动Debugger至少需要几分钟时间。