在之前一段時間涉及php擴展開發,對php源代碼有調試需求,然而網上大部分都是在linux下調試的教程,windows系統下的非常少并且過程也只是粗略一講。所以決定自己嘗試在windows下建立調試環境,畢竟,原理是相通的:)。
1.準備
以下是我開發機上的配置,可以和我保持一致減少因為工具版本而出現額外問題的幾率。
1.Visual Code源代碼編輯調試工具? ? ? ? ? ? ? ? ? ? ?(推薦學習:vscode入門教程)
立即學習“PHP免費學習筆記(深入)”;
2.Visual Studio Community2017(VS一般都把WIN下開發需要的東西都帶全了,畢竟宇宙全家桶…..)
紅色標注區域必須安裝
3.PHP7源代碼(也可以選擇從github上拉取)
可以任意選擇一個打包版本的源代碼
4.PHP7-SDK
我的開發機是64位,因為是編譯PHP7所以選擇了64位的deps-7.1-vc14-x64(擴展依賴庫包),建立php-sdk-binary-tools文件夾,將php-sdk-binary-tools-xxx.zip解壓至這個文件夾中,建立deps-vc14-x64文件夾,也將deps-7.1-vc14-x64.7z解壓至這個文件夾中。
同時將php-sdk-binary-tools中的bin路徑添加到WINDOWS系統變量PATH中。deps-7.1-vc14-x64本文暫時用不上,不過你也可以先下載下來,因為編譯自帶的一些擴展所依賴的庫和頭文件都包含在里面,當你要編譯自帶擴展的時候可以用上:)。
2.編譯源代碼
安裝VS后,運行在開始菜單里的Visual Studio 2017文件夾下的x64 Native Tools Command Prompt for VS 2017
運行后,進入到PHP7源代碼目錄中
1.執行buildconf.bat生成WIN下的configure文件(configure.js)
2.可以運行configure.bat –help查看支持的編譯參數
3.執行configure.bat –disable-all –enable-cli –enable-debug(為了示范簡單編譯,可以自行添加參數)
4.執行nmake命令開始編譯
以本機的配置,編譯完成后的執行文件在源代碼目錄中的x64/Debug_TS下,后面就可以準備開始調試了。
3.使用vscode調試
調試方式可以分2種,一種是附加進程調試,一種是運行啟動調試,兩種方式都會介紹,先介紹運行啟動調試。
先創建一個用于測試的php的源代碼文件,我創建在源代碼目錄下的x64/Debug_TS里。
隨后選擇菜單調試->打開配置,并選擇C++(Windows)
最后將配置文件修改如下所示
我們之前編譯了PHP SAPI的cli,我們打開sapi/cli/php_cli.c源文件,定位到1197行的main函數內打上斷點。
隨后我們到VS的DEBUG控制面板運行調試即可。
隨后即可看到斷點命中。
附加進程調試配置也是大同小異,我們點擊菜單選項調試->打開配置,并選擇添加配置,在彈出來的選擇列表中選擇C/C++(Windows) Attach
最后的配置文件如下:
我們首先用PHP -S啟動一個內置服務器(這個php一定要是你編譯生成的php.exe文件),來方便演示附加進程調試,我啟動的位置是在我們之前創建的test.php文件所在的目錄下。
訪問效果如下:
啟動調試的方式一樣,在VSCODE的調試面板里面選擇(Windows) Attach運行即可。
隨后在彈出來的進程列表中選擇PHP進程后開始進入調試狀態。
我們test.php中使用了array_push函數,我們這次到這個函數的實現中斷點,打開ext/standard/array.c,定位到2540行,打上斷點。
隨后在瀏覽器中訪問http://127.0.0.1:8080/test.php 即可觸發斷點。
4.最后
本文的調試方式也可以作為擴展開發的調試方式,當然,同樣的配置思路也適用于宇宙IDE Visual Studio,我在WINDOWS下配置VSCODE調試PHP源代碼的思路也適用于其它平臺(Mac/Linux……)。如果你感興趣在Visual Studio中調試PHP源代碼,不如以本文為思路嘗試著自己思考動手來試試~