相關環境信息:開發機Win7 x64、遠程機器WinXP、調試器是CDB、Qt版本5.2.1
一、部署遠程機器環境
我這里用的是虛擬機(Windows XP),根據你要調試的程序選擇安裝不同架構的WinDbg,因為安裝文件不大,所以我一般都會裝上
附上下載地址:
dbg_i386_6.12.2.633:http://download.csdn.net/detail/aqtata/7210807
dbg_amd64_6.12.2.633:http://download.csdn.net/detail/aqtata/7210817
安裝過程很簡單,下一步就行了。安裝好后第一件事情就是設置調試符號路徑,添加系統環境變量_NT_SYMBOL_PATH
值填寫為SRV*D:\Symbols*http://msdl.microsoft.com/download/symbols
其中"D:\Symbols"是符號路徑,根據自己的情況修改
接着回到本機,把QtCreator目錄下的qtcreatorcdbext.dll復制到遠程機器上
x86:"\lib\qtcreatorcdbext32\qtcreatorcdbext.dll"
x64:"\lib\qtcreatorcdbext64\qtcreatorcdbext.dll"
根據需要復制一個就行了,我這里復制的x86的,拷貝到"D:\DebugServer"下面
然后添加系統環境變量_NT_DEBUGGER_EXTENSION_PATH,並指向這個目錄
二、部署Qt程序運行環境
Qt程序離不開它的那些個DLL文件,所以我們根據自身程序的依賴要把相關DLL拷進到調試機器上
一個Windows下的窗口Qt程序,至少需要4個DLL:Qt5Widgetsd.dll、Qt5Guid、Qt5COred、qwindowsd.dll
注意我這里拷貝的是調試版本,而且我的Qt是自行編譯的,需要依賴的DLL沒有官方安裝版那么多
在Qt目錄下的lib文件夾里找到相關DLL復制到遠程機器
最后文件結構如下:
D:\DebugServer\qtcreatorcdbext.dll
D:\Qt\Qt5Cored.dll
D:\Qt\Qt5Guid.dll
D:\Qt\Qt5Guid.dll
D:\DebugServer\Qt\plugins\platforms\qwindowsd.dll
注意,因為Windows下的程序依賴qwindowsd.dll,而它是以插件的形式存在的,所以需要設置特別的路徑
繼續添加環境變量QT_PLUGIN_PATH,將其指向plugins目錄
並將"D:\DebugServer\Qt"添加到PATH中,以便我們的程序在任何位置都可以運行起來
因為我這邊是用的msvc2013編譯器,把依賴的msvcp120d.dll和msvcr120d.dll也一起拷貝到Qt文件夾中了
這個其實拷貝到System32目錄下也可以
三、開始遠程調試
在本機新建一個窗口工程並在main.cpp中加一句輸出當前系統版本號的語句
- #include "mainwindow.h"
- #include <QApplication>
- #include <QSysInfo>
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
- qDebug() << QSysInfo::windowsVersion();
- return a.exec();
- }
生成Debug版,並將exe文件復制到遠程機器的C:\下,完整路徑是C:\Demo.exe
從CMD中啟動cdb.exe(在WinDbg根目錄下)並附上相關參數:cdb.exe -server tcp:port=123 c:\demo.exe
-server是啟動調試服務,port設置了調試端口
第一次啟動的時候可能要等一會,因為需要下載調試符號文件
當看到等待用戶輸入的時候表示已經可以開始調試了
回到QtCreator中選擇"掛接到一個CDB會話..."
然后設置遠程機器的IP和端口,點擊確定
此時遠程機器上的調試服務器已經開始工作了,第一次的話因為需要下載調試符號所以要等一會
最后可以看到調試窗口輸出了"48",對應Qt中的枚舉值QSysInfo::WV_XP
http://blog.csdn.net/aqtata/article/details/24926633