在咱們開發過程當中。咱們若是常常性的echo、dump效率很低。因此咱們就可使用xdebug進行斷點調試。php
下面的教程以 Windows 操做系統爲例子。其餘操做系統相似。nginx
安裝xdebug前,請肯定本身的php版本和使用的TS或NTS。若是實在不清楚,能夠經過如下方式查看git
如上圖,第一個紅框就是如今使用的php的版本,github
第二個框就是你使用php編譯的X86仍是X64.web
第三個是表示加載的php.ini的位置。咱們會用到,後面須要改php.ini。就是改這個位置。必定不能改錯了。apache
第四個框,就是Thread Safety 若是是 diabled 就表示咱們用的PHP是NTS的。若是是enable 就表明是TS的。待會選擇xdebug的時候就會用到上面的信息。api
下載地址:https://xdebug.org/download.php瀏覽器
根據咱們上圖的信息,咱們選擇的應該是php7.1 x86 nts的 xdebug拓展服務器
32bit 就是32位操做系統。也就是x86. 若是後面沒有寫TS ,就表明這個拓展是NTS的。不要選錯了。php7
將咱們上面下載好的拓展移動到 php 的 extension_dir 的目錄。若是不知道本身的拓展目錄在哪。仍是能夠經過phpinfo
查看
搜索 extension_dir 就是拓展所在的目錄。
打開 php.ini php.ini 的位置。經過**phpinfo()**中進行查看。 以避免改錯位置。
在後面加上一下配置
[Xdebug]
;拓展的位置。這裏必定要zend_extesion zend_extension="php_xdebug-2.7.0alpha1-7.1-vc14-nts.dll" ;啓用性能檢測分析 xdebug.profiler_enable=on ;啓用代碼自動跟蹤 xdebug.auto_trace=on ;容許收集傳遞給函數的參數變量 xdebug.collect_params=on ;容許收集函數調用的返回值 xdebug.collect_return=on xdebug.remote_enable=1 xdebug.remote_handle="dbgp" xdebug.remote_mode="req" xdebug.remote_host="localhost" ;端口 能夠本身更改,不要衝突,待會須要用到 xdebug.remote_port=9002 xdebug.idekey="PHPSTORM" xdebug.collect_includes = 1 xdebug.remote_autostart = 1 ;指定堆棧跟蹤文件的存放目錄 xdebug.trace_output_dir="D:/debug" ;指定性能分析文件的存放目錄 xdebug.profiler_output_dir="D:/debug" xdebug.profiler_output_name = cachegrind.out.%t.%p
驗證Xdebug。一樣使用咱們的 phpinfo
進行驗證。記得改完配置,記得重啓apache或者nginx 或者其餘的web服務器
搜索xdebug。 看到上面的界面就是配置成功了。而後再檢查上面的配置是否是和你設置的一致。
settings -->Languages Frameworks ---> PHP
點擊紅框內的 ...
先點擊下圖的 + 添加一個新的cli 。
點擊 ... 選擇你的php.exe的位置。 這個php 必定是你的web用的。跟咱們配置Xdebug的要同樣。
選擇了以後,底下就會檢測到咱們的php的版本,和xdebug版本以及php.ini的配置。若是這裏的信息和咱們phpinfo 看到的不同,就要檢查下,是否是選擇的php的版本不對。
settings -->Languages Frameworks ---> PHP --->Debug
更改紅框中的端口爲咱們在php.ini中的配置的端口。咱們在php.ini配置了9002.因此這裏也要寫上9002.不要寫錯了。不然就會有問題。
紅框中的配置。按照咱們在php.ini中的配置進行填寫。
xdebug.idekey="PHPSTORM" xdebug.remote_host="localhost" xdebug.remote_port=9002
而後本身本地須要debug的host 、 端口
點擊菜單欄中的run。 而後點擊edit Congiurations
在出來後的選項中,點擊 + 而後選擇 PHP Web Page
選擇你剛纔 添加的 server 以及起始的web地址。 點擊 apply 應用
點擊下圖中的這個小電話的圖標。 讓你變綠色。
沒有監聽的狀態
正在監聽的狀態
在咱們須要調試的代碼處,咱們須要加上一個斷點,而後程序運行到這個地方,就會停下來。下面以TP5爲例子。
而後咱們運行咱們的項目。就會發現瀏覽器卡住了,這個時候,咱們打開PHPstorm。就會發現。程序停下來了。
咱們能夠很清晰的看到上下文的變量的值。以及框架的執行的流程。這對咱們分析一個框架,是頗有幫助的。
而後咱們能夠進行單步調試,或者步入、跳出等操做
圖中,全部畫紅圈的就是經常使用到的工具。其具體功能介紹以下:
此工具,點擊後,當前調試全部變量所有銷燬,從新開啓一輪請求。即如同刷新頁面。
此工具點擊後,繼續 Laravel 生命進程的路程,直到下一個斷點,暫停
此工具,中止調試,結束 Laravel 週期。
變量欄標籤,下面的內容是當前調試位置全部可以用到的變量(包含全局和局部),記住能用到就會顯示
此工具的做用是當調試行文件關閉了,或者代碼視圖跑到其它位置了,點擊它,就能從新定位到調試文件以及調試行
此工具的做用是當調試行代碼有調用函數,包含文件,new 新對象時,可以不進入相應函數、文件、類中,直接返回其調用的結果,在當前行中,執行下文
此工具功能正好和上面的相反,即進入和強制進入當前調試行將要調用的函數、方法、包含的文件、new的新對象類文件中,執行相應代碼
跳出正在執行的函數、方法、包含的文件、new 新對象的類文件,至調用行,並繼續執行調用行下面的代碼