1. 程式人生 > >VS2015+QT5.9.5除錯進QT原始碼的環境搭建【Debugging QT——Step into QT source code】

VS2015+QT5.9.5除錯進QT原始碼的環境搭建【Debugging QT——Step into QT source code】

VS2015+QT5.9.5編譯環境的搭建方法,網上文章一大堆,小編就不贅述了,這裡重點講一下通常在VS下使用開源庫(如QT/Opencv等)除錯環境的搭建方法。能夠在除錯軟體的時候,除錯進入諸如QT等開源庫的原始碼自然更有助於學習開源庫的內部機制以及發現軟體開發時的深層次bug。因此,還是強烈推薦優先搭建好vs除錯環境的。

1.首先安裝VS2015,這沒什麼可說的,注意勾選上VS的開發工具。

2.接下來安裝QT5.9.5,我們首先需要去官網下載安裝包

下載好以後自然是安裝了,exe的安裝過程,小編也不贅述了,該勾選什麼,csdn上文章不少了【這裡要重點提一下的是,安裝時務必要勾上如下圖5.9.2中的Sources原始碼包,後面通過除錯符號資訊連結原始碼要用到這個包】。另外,由於qtcreator的除錯環境網上相關文章也不少,而且小編不習慣在qtcreator下除錯原始碼,這裡小編也不提了。【另外,要提一下,小編我是勾上了32位和64位兩個編譯包的,另外小編我安裝的是QT5.9.5,這裡是網上借的圖】


接下來說下關於VS的安裝,首先,我們需要在VS下安裝一些擴充套件工具,依次點選vs2015選單欄上的工具->擴充套件和更新,將開啟如下視窗:

點選左側聯機標籤,小編我這裡下載了Visual Assist,當然這個與QT無關,但是可以輔助VS程式設計,還是建議安裝,當然,大部分程式設計師都有安裝的吧。

接下來,我們在右上角搜尋QT相關的工具,小編安裝瞭如下兩個:

接下來可以配置除錯環境了,其實只要將PDB檔案與debug下生成的lib檔案放在一起,VS就可以獲取到Debug時所需要的符號資訊和跳轉地址。

因此,首先我們將PDB壓縮包拷貝到合適的位置並解壓。小編我選擇了放在QT安裝目錄下。

接下來進入該解壓目錄,由於小編我使用的僅是vs2015,因此,小編我使用windows自帶的模糊搜尋【右上角搜尋*2017*】,將2017需要的所有pdb除錯包搜尋出來全選並刪除【節約電腦空間】。相同的方法刪除2013的pdb除錯包。

現在剩下的全是vs2015所需要的pdb包了【含32位和64位版本的所有包】,全選並使用解壓軟體進行獨立資料夾解壓,將所有的安裝包解壓出來並刪除。



現在這個資料夾下都是我們需要的pdb包了,但是我們還需要區分一下64位和32位的pdb包。因此,繼續使用模糊搜尋【*X86_64*】,如下圖:


利用全選剪下貼上,將64位和32位的包分別放在不同的資料夾下【小編我分別剪下到了x86和x64目錄下】。

接下來我們就是要將所有資料夾下的pdb檔案分別拷貝到對應的QT安裝目錄下的lib同名檔案的對應目錄下【注意除錯的lib名字末尾是帶有d標識的】,如下圖中的Qt5Widgetsd.pdb就需要拷貝到如下圖Qt5Widgetsd.lib對應的QT安裝目錄下。當然,一個個手動拷貝,這不是正常人能幹的事,小編我用QT結合QSQLITE寫了一個小軟體來完成這個工作,就是先向資料庫註冊所有lib檔案的目錄,然後遍歷所有的pdb檔案,將其拷貝到相應的lib目錄下。



小編我製作的小軟體如下圖所示:

只需在如上軟體的libDir上選中C:\Qt\Qt5.9.5\5.9.5\msvc2015目錄,並在pdbDir上選中C:\Qt\x86目錄【小編我是依據自己的電腦軟體安裝情況舉例】,點選Import PDB按鈕即可完成自動複製操作,以上是對於x86情況,而x64則分別是選取C:\Qt\Qt5.9.5\5.9.5\msvc2015_64目錄和C:\Qt\x64目錄。[注意,由於QT定製安裝和官方釋出的pdb包不全等原因,可能導致部分pdb檔案匹配不到對應的lib,部分lib也缺失對應的pdb,而使進度條不能跑到百分之百,不用管它,只要拷貝結束即可。]

接下來由於已經集中拷貝好了PDB檔案在對應安裝目錄lib下,我們可以繼續在VS中設定除錯的symbol資訊了,在選單欄上依次點選除錯->選項,開啟如下視窗,並新增好x86和x64的lib目錄【這裡其實是新增pdb檔案目錄,由於x86和x64的pdb檔案已經分別集中拷貝到了這兩個資料夾下,注意讀者們需根據自己的安裝目錄進行選擇】。

接下來在解決方案上右擊,選擇屬性。


並在如下對話方塊中加入QT原始碼包的路徑【如果在前述安裝QT時,有勾選原始碼包專案的話,應該是會有這個Src檔案目錄的。】


VS將所有用於除錯的符號資訊和地址存放在了PDB檔案中,而我們只要將對應debug版本下的PDB檔案放在其對應的Lib檔案同名目錄下,並在VS中做好相關目錄的設定,就可以進行對其原始碼的除錯了,這對於所有開源庫都是一致的,不僅限於QT,如Opencv,您自行編譯一份Debug版本後,通過將lib和pdb拷貝到一起,再匯入VS,即也可以實現基於Opencv原始碼包的除錯支援。

最後,由於小編在使用exe安裝QT時,同時安裝了32位和64位的版本,所以簡單補充說明一下關於32位和64位編譯時環境切換時的一些設定。

切換32位和64位exe開發軟體編譯環境的位置,見如下圖:

除此以外,我們需要在按照前述內容安裝了QT擴充套件工具以後,在選單欄的QT選單下,依次選擇Qt VS Tools->Qt Options,並新增如下目錄:

同時,我們在編譯專案前,還要開啟Qt VS Tools->Qt ProjectSettings,在Version中選好自己專案對應的編譯環境,如下圖:

同時在第二頁中,我們可以根據專案需要,新增自己需要的模組,如下圖:

而這裡選模組的操作,實際上是自動幫我們在選單專案->專案屬性的連結器輸入項中添加了對應的lib庫。


所有一切都設定好後,我們即可在開發自己的專案時,隨時編譯不同環境下的專案【32位或64位】,並單步除錯或中斷進入QT原始碼,如下圖所示:



最後順帶提一下軟體釋出之前的打包操作:

只需要利用QT安裝目錄下的C:\Qt\Qt5.9.5\5.9.5\msvc2015\bin\windeployqt.exe命令處理生成的專案exe檔案,即可自動拷貝對應的針對QT和平臺的依賴到exe檔案目錄。如下圖所示:

拷貝之前,小編exe目錄中的檔案如下:

執行以上內容後,將拷貝以下對於QT的依賴到exe所在目錄:

當然,拷貝完這些依賴,你的電腦還有可能執行不了這個軟體,因為小編我是用VS2015編寫的上述小軟體,因此你可能還需要安裝VS2015執行時庫。

因此,Qt在釋出軟體時,除了要加入一大堆qt的依賴項,還需要在目標機上安裝對應的執行時庫,也還挺麻煩的。