工要善其事,必先利其器,首先我們准備的是強大開發工具IDE : PhpStorm
我們用的是最新版 phpstorm 2019.3 (網上有破解激活方法)
然后用的是 phpStudy v8 環境套件 (官網下載地址: https://www.xp.cn )
windows下的php安裝XDebug拓展: https://www.cnblogs.com/phplog/articles/11038520.html
創建一個網站,我選的php版本是 php7.2:
因為框架用的 thinkphp 5.1 , 服務器啟用的是 nginx , 所以還要再設置一下偽靜態
thinkphp 5.0, 5.1 的 nginx偽靜態規則:
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; }
thinkphp 3.2 的nginx偽靜態規則:
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; }
然后重啟nginx服務。
編輯對應版本的 php.ini 文件配置:
在php.ini配置文件中加入配置:
[XDebug] ;指定Xdebug擴展文件的絕對路徑 zend_extension="E:\PHPServer\phpStudy_v8\Extensions\php\php7.2.9nts\ext\php_xdebug.dll" ;指定堆棧跟蹤文件的存放目錄 xdebug.trace_output_dir="E:\PHPServer\phpStudy_v8\Extensions\tmp\xdebug" ;是否開啟遠程調試 xdebug.remote_enable=on ;開啟遠程調試自動啟動 xdebug.remote_autostart=on xdebug.remote_mode=req ;指定遠程調試的處理協議 xdebug.remote_handler="dbgp" ;指定遠程調試的主機名 xdebug.remote_host="127.0.0.1" ;指定遠程調試的端口號 xdebug.remote_port=9100 ;是否啟用Xdebug的性能分析,並創建性能信息文件 ;xdebug.profiler_enable=on ;xdebug.profiler_enable_trigger=0 ;指定性能分析信息文件的輸出目錄 xdebug.profiler_output_dir="E:\PHPServer\phpStudy_v8\Extensions\tmp\xdebug" ;指定傳遞給DBGp調試器處理程序的IDE Key xdebug.idekey="PHPSTORM" ;啟用代碼自動跟蹤 ;xdebug.auto_trace=on ;允許收集傳遞給函數的參數變量 xdebug.collect_params=on ;允許收集函數調用的返回值 xdebug.collect_return=on ;是否收集變量 xdebug.collect_vars=on ;是否開啟異常跟蹤 xdebug.show_exception_trace=0 ;顯示局部變量 xdebug.show_local_vars=on ;顯示默認的錯誤信息 xdebug.default_enable=on ;xdebug.remote_log="E:\PHPServer\phpStudy_v8\Extensions\tmp\xdebug\remote.log"
特別注意:
zend_extension="E:\PHPServer\phpStudy_v8\Extensions\php\php7.2.9nts\ext\php_xdebug.dll" 這個路徑根據自己的進行修改
xdebug.trace_output_dir="E:\PHPServer\phpStudy_v8\Extensions\tmp\xdebug" 這個文件夾目錄必須存在,沒有的話手動創建目錄
xdebug.profiler_output_dir="E:\PHPServer\phpStudy_v8\Extensions\tmp\xdebug" 這個文件夾目錄同上
xdebug.remote_port=9100 我把監聽端口設置為9100
xdebug.idekey="PHPSTORM" 把IDE KEY設置為 PHPSTORM
然后配置 PHPStorm 配置:
Language & Frameworks > PHP > Debug , 設置 Xdebug 的 Debug Port 為 上面設置的 9100 端口
點擊工具欄 配置 Edit Configurations..
彈出窗口中,點擊 + 號, 點擊添加 PHP Remote Debug
彈出窗口 Run/Debug Configurations 配置 Configuration > Filter debug connection by IDE key 前面打勾,
選擇一個Server, 沒有 Server的話 點擊右邊的 ... 按鈕, 添加一個 Server
新建一個 Server , 配置 Debugger 為 Xdebug
彈出窗口 Run/Debug Configurations 配置中 IDE key 填寫 PHPSTORM
用Postman 來測試接口
就會發現 一直在發送等待狀態 Sending request
我們返回 PhpStorm 編輯器,就會出現 XDebug 斷點調試響應區域,XDebug配置算是完成了。
如果沒有喚醒phpstorm的debug調試功能,可以:
在postman請求中的COOKIE里加入XDEBUG_SESSION=PHPSTORM則可調起phpstrom的調試功能
在Headers中新增key:Cookie,Value:XDEBUG_SESSION=PHPSTORM
我們就可以方便的查看各種變量常量的運行值了:
編輯器其他配置:
以fpm方式-web的調試
以cli模式運行xdebug:
安裝瀏覽器Debug拓展:
1. Firefox火狐瀏覽器
安裝 Xdebug Helper for Firefox 拓展:
拓展安裝完成后,就會多出一個debug按鈕:
2. Chrome谷歌瀏覽器
到谷歌應用商店: https://chrome.google.com/webstore/category/extensions?hl=zh-CN 搜索安裝 Xdebug helper 拓展:
輸入 xdebug helper 然后按Enter回車健, 出現結果的第一條就是我們要安裝的拓展:
安裝完成后,就會出現Debug按鈕:
XDebug調試的一些按鈕功能:
圖標 | 功能 |
---|---|
![]() |
重新執行DEBUG (Rerun XDebug Ctrl + F5) |
![]() |
回到當前執行點的文件 (Show Execution Point Alt + F10) |
![]() |
不進入函數詳情,執行下一步 (Step Over F8) |
![]() |
進入函數內部,執行下一步 (Step Into F7) |
![]() |
強行進入某個方法 (Force Step Into Alt + Shift + F7) |
![]() |
單步執行到子函數內時,就可以執行完子函數余下部分,並返回到上一層函數。(Step Out Shift + F8) |
![]() |
執行到下一個斷點,或者鼠標懸停處(Run to Cursor Alt + F9) |
![]() |
執行修改變量或返回的結果用於二次調試(Evaluate Expression Alt + F8) |
![]() |
顯示值的地址 (Show Values addresses) |
![]() |
是否顯示空的值 , 默認是不顯示(Show empty superglobals variables) |
![]() |
將方法添加到跳過列表(Add method to skip list) |
![]() |
運行到下個斷點,沒有斷點就直接運行完成 (Resume Program F9) |
![]() |
停止本次debug (Stop XDebug Ctrl + F2) |
![]() |
管理所有斷點 (View Breakpoints Ctrl + Shift + F8) |
![]() |
忽略所有斷點 (Mute Breakpoints) |
調試按鈕說明:
F7 通過當前行,進入下一行,如果該行是方法,則進入方法體
F8 通過當前行,進入下一行,如果該行是方法,也直接進入下一行,不進入方法體
F9 通過整個流程,全部順序執行,除非遇到下一個斷點
F8 step over 步越 執行當前函數的下一步,如果有子函數,也不會進入,會一直執行到函數結束
F7 step into 步入 執行當前函數的下一步,如果有子函數,會從頭到尾執行子函數,還原了程序執行的最詳細的路線,從構造函數到結尾的每一步都會跳到。
Alt + Shift + F7 force step into 與 step into 相同,執行當前函數的下一步,如果有子函數也會進入子函數,只不過不會從頭到尾的還原函數執行的路線,會直接跳到子函數內第一步,構造函數等一些前置方法會忽略
Shift + F8 step out 步出 跳出當前執行的函數,跳到父函數的下一步。
Alt + F9 run to cursor 執行到下一個斷點處