Qt5远程调试桌面应用笔记

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调试环境由 HostTarget两部分组成,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至少需要几分钟时间。

你可能感兴趣的:(C++,Qt)