php調試利器 -- xdebug

以前整理在印象筆記中,如今搬出來。分本地調試和遠程調試。本文親測經過並截圖,有問題歡迎留言探討。
(參考網上多位前輩的博客,整理在筆記裏忘記保存原文連接,這裏沒法貼出連接,望見諒)
 
# 痛處

通常php項目調試都用echo, var_dump()之類的函數調試,項目大的話很不方便,也很低效;

 
# 預備

安裝xdebug擴展;
windows找相應的版本下載便可,linux下在  https://xdebug.org/wizard.php這個頁面把 php -i 輸出結果放裏面會告訴你怎麼弄,至關方便;  以下:
 
1,修改php配置文件,在最後添加.
zend_extension = "E:/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11-x86_64.dll";
[xdebug]
xdebug.auto_trace=On
xdebug.collect_params=On
xdebug.collect_vars = On ;收集變量
xdebug.collect_return = On ;收集返回值
xdebug.trace_output_dir="e:/wamp/tmp/debuginfo"
xdebug.remote_enable = on
xdebug.remote_handler = dbgp   
xdebug.remote_host= localhost    ;用於遠程調試  服務器的地址
xdebug.remote_connect_back = 1;用於遠程調試
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM
xdebug.profiler_enable = on
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "E:/wamp/tmp/debuginfo"
xdebug.show_local_vars=0
xdebug.show_exception_trace = On ;開啓異常跟蹤
xdebugbug.max_nesting_level = 10000
 
phpinfo中驗證xdebug擴展是否啓用。 服務端配置完成!
 
2,phpstrom 配置

這部配置的端口意思是  IDE 會在本機監聽9000端口php

 
在項目右上角debug配置中
 
根據項目選擇類型以下,網站選擇web application,Name項自定義
 
 
server項沒有,點擊後面按鈕配置

配置starturl(入口地址)linux

 完成配置以下:web

點那個蟲子就開啓了調試,會在上一步咱們配置的默認瀏覽器打開starturl,以下:chrome

 

在代碼裏打一個斷點,刷新一下頁面,調試窗口會顯示詳細信息, 上面有操做按鈕,以下:

# 優化地方windows

上面調試步驟很麻煩,咱們都是但願想調試的時候就調試,推薦插件 chrome 插件 xdebug helper 方便  隨時調試;也是個臭蟲的圖標,安裝上配置一下,以下:

 

 在須要調試的頁面啓用插件

IDE中點亮電話的圖標,啓動監聽,以下:瀏覽器

 
配置結束,代碼裏想調試直接打斷點,完後瀏覽器訪問頁面,運行到斷點IDE就會監聽debug信息,並把信息顯示出來;

 
#xdebug 遠程調試

有點項目在本地開發很難搭建環境,咱們須要在遠程開發和調試。也就是在本地去調試遠程開發機上的代碼。

!0,遠程調試原理:

 

 左邊是調試客戶端,好比IDEA、eclipse之類的IDE,右邊是xdebug,運行按照以下步驟進行:
1, IDE監聽一個調試端口,默認是9000,能夠自行配置。
2, 用戶訪問右邊php環境的server,咱們這裏使用瀏覽器訪問(隨便在那都行,爲方便選擇本地瀏覽器),通常IDE會自動幫咱們在正常的url後面增長
      XDEBUG_SESSION_START=一個隨機數  的參數。這個參數是用來通知xdebug主動鏈接IDE的9000端口進行調試的,沒有這個參數,xdebug不會去主動鏈接IDE,
      調試也就不會觸發。
3, xdebug主動去鏈接IDE的9000端口, 鏈接成功後,調試開始。
 
xdebug是如何知道IDE監聽9000端口的呢?
xdebug有兩個配置:remote_host和remote_port,分別表明IDE的ip地址和監聽端口。因而可知,IDE和xdebug必須協商好監聽端口。
 
端口好辦,可是若是個人ip會變化,那我換一個ip,豈不是要修改下xdebug.remote_host配置嗎?好麻煩!!!
不知道ip不要緊,xdebug能夠本身知道,只要設置 xdebug.remote_connect_back 爲1就能夠了,其運行原理見下圖,實現很簡單,xdebug能夠從http請求的頭部獲取ip
地址,以後就用該ip地址做爲remote_host來鏈接。

 

 
!1,服務端環境安裝xdebug(方法如上)

最關鍵的兩個設置xdebug.remote_host和xdebug.remote_connect_back,
xdebug.remote_host 要設置成 你本機的地址多個用逗號隔開
xdebug.remote_connect_back要設置成1或者on 設置完這個會自動忽略remote_host的設置,若是本地是自動獲取ip或者多人的話開啓這個比較好

服務端的配置已完成!服務器

 
!2,IDE配置
(調試遠端代碼通常會和遠端開發同時進行,遠端調試須要打開一個本地和遠端的通道,要不接受不到調試信息)
> 新建一個遠端的php解釋器

 

配置正確的話,以下圖:

> 新建項目 或者 把本地已有的項目和遠端的項目映射一下  都行app

 
> 在項目中配置 sftp

 

 

再配置mapping

 

把遠端代碼下載下來,以下:

 

來個截圖,好累啊

 這個時候看咱們開始配置的那個遠端解釋器 以前警告沒了,由於咱們配置了mappingeclipse

配置debug,步驟同上,不同的地方是配置 path mappingide

開始調試了 打斷點  瀏覽器訪問遠端的地址   debug窗口已經有調試信息了

 

 

忽略個人504 這是別的緣由形成的和xdebug不要緊 由於是測試項目懶得管  ~ ~
 
開發遠端項目咱們剛纔配置好了sftp,咱們本地修改能夠經過以下配置自動同步到遠端 我通常選 ctrl + s 那項   按ctrl + s會自動同步到遠端開發機
相關文章
相關標籤/搜索