windows 下使用 mingw編譯器 除錯時 無法跟進原始碼

輕風々 發表於 2021-09-20

windows 下使用 mingw編譯器 除錯時 無法跟進原始碼

最近在公司使用QT 開發,官方線上下載的 安裝的QT mingw 都是沒有debug版本的 由於沒有debug版本動態庫

所以你除錯的時候壓根就無法跟進QT原始碼裡,那麼找問題的時候 大部分都是跟到彙編程式碼了。

由於剛來公司不久,人微言輕。我建議統一使用msvc編譯 得到拒絕後 沒有辦法只能重新編譯mingw debug版本 了。

下面記錄下使用mingw 編譯debug 版本步驟

1、 首先準備環境要做好

Perl version 5.12 
Python version 2.7 
Ruby version 1.9.3

這些東西要先安裝好

請自行百度 安裝

2、QT環境已經安裝好了

開啟QT5.15.2(Mingw8.1.0 64-bit) 命令列工具

image-20210919150924727

3、在命令列工具中 切換到 你QT安裝的目錄\版本號\src

執行如下程式碼

configure -debug -platform win32-g++ -opensource -confirm-license -opengl desktop -prefix "你的qt安裝目錄/qt版本號"

4、開始構建

mingw32-make
可能會報如下錯誤
 cannot find -lpnp_basictoolsd
collect2.exe: error: ld returned 1 exit status
你QT安裝的目錄\版本\Src\qtbase\examples\widgets\tools\plugandpaint 下的 pro 檔案 編譯一個 debug 版本

繼續編譯

mingw32-make

繼續報錯 接著解決

C:\Users\HotPixel-2\AppData\Local\Microsoft\WindowsApps\python.exe D:/Qt/5.15.2/Src/qtdeclarative/src/3rdparty/masm/yarr/create_regex_tables > .generated\debug\RegExpJitTables.h
mingw32-make[4]: *** [Makefile.Debug:1059: .generated/debug/RegExpJitTables.h] Error 9009

找到RegExpJitTables.h 生成的所在目錄 自己手動執行

python.exe D:/Qt/5.15.2/Src/qtdeclarative/src/3rdparty/masm/yarr/create_regex_tables > RegExpJitTables.h

繼續編譯

mingw32-make

5、如果構建過程沒有錯誤執行 安裝命令即可

mingw32-make install

6、安裝完以後 執行aaa 命令時 設定的-prefix引數的目錄下 會多出這些資料夾

image-20210920112221729

將這些資料夾 複製到 你QT 安裝目錄/版本號/ 目錄下新建一個 mingw84_64_debug 資料夾

如下圖目錄結構

image-20210920112544206

7、開啟QT creator 選單 - 工具-選項-kits

新增你編譯好的這個mingw 64 debug 版本環境

image-20210920112839800

這個時候在選中 Kits 下的 Kits 項 clone 一份 mingw64 預設的 改下名稱 和 QT版本

image-20210920113010794

到此即可使用mingw 編譯器 完美除錯 跟進QT 原始碼 定位問題了

  • 開啟你的專案 選擇你新增加的 mingw 64 debug 版本的環境

    image-20210920113709788

  • 看看效果

    原來這段執行緒池的start 函式我 按F11 是怎麼也進不去的

    image-20210920113352373

    現在按下F11完美進入

    image-20210920113423464

    當然QT 需要設定除錯原始碼的路徑步驟也不能少

    image-20210920113522130

參考文章如下:

https://doc-snapshots.qt.io/qt5-5.15/windows-building.html