老法師談技術 - ?PHP單步調試方法(xdebug)
在production環境上面使用單步調試的機會其實不多,但是不妨礙在代碼編寫階段,或者代碼閱讀階段,單步調試重要性,有時候單步調試一段代碼比單純閱讀要效率高很多。
借助于xdebug的庫,PHP的單步調試能力非常強大,而且并不依賴于具體客戶端,也就是說,無論你是使用PHPStorm或者是Sublime,還是VIM都可以調試PHP程序。鑒于PHP程序都是部署在服務器端,我們這里只討論remote調試方法。
遠程(Remote)調試服務器端PHP程序需要考慮到下面幾個方面:
- 在服務器端,配置xdebug支持remote調試,其實也就是讓xdebug發送調試信息到制定地址和端口,
- 在客戶端(你的PC端),配置xdebug服務器,來接受遠端(Remote)的調試信息
- 在客戶端映射代碼,這樣遠端的調試信息可以定位到準確的代碼位置
無論你是使用何種客戶端,都需要考慮上面的三個方面,好下面開始正式的配置信息。
-
服務器端的xdebug配置
首先需要安裝xdebug,這里就不展開了,不同的系統安裝方法略有不同。其次,配置xdebug,以ubuntu為例配置文件在(/etc/php7/mods-available/xdebug.ini)
end_extension = "xdebug.so" xdebug.remote_autostart = 1 xdebug.remote_enable = 1 xdebug.remote_connect_back = 0 xdebug.idekey=PHPSTORM xdebug.remote_handler = "dbgp" xdebug.remote_host = 10.0.1.4 xdebug.remote_port = 9000 xdebug.remote_log = "/tmp/xdebug/xdebug_remote.log"
idekey是客戶端用來認證xdebug發送過來的信息,所以確保兩邊配置的要完全一致。remote_host需要填寫的是xdebug服務器的地址,在這里也就是你的PC機的地址。remote_log非常有用,發現遠程調試不工作的時候,log會告訴你那里出了錯。
-
客戶端xdebug配置
Sublime是常用的PHP編輯器,以Sublime舉例來說,需要首先安裝xdebug插件,最簡單的辦法就是使用Package Control,具體如何安裝這里就不多說了,跟任何其他插件的安裝沒有任何區別。Sublime的xdebug的配置信息如下:
{ "path_mapping": { "/WeCenter/" : "/Users/aaa/Mydoc/Code/WeCenter/v319/wecenter-master/" }, "url": "http://192.168.1.24:30080", "ide_key": "PHPSTORM", "port": 9000, }
配置非常簡單,唯一要注意的是path mapping,如果設置錯誤,中斷的同時不能定位到具體的代碼。點擊Tools\xDebug\Start Debugging之后,在瀏覽器里面刷新頁面的時候,應該可以看到如下界面:
Sublime-xdebug.png?
PHPStorm是另外一個廣泛使用的PHP開發工具,其配置都是以圖形界面的方式進行,我們下面開始一步步的配置:
在Preference\Languages & Frameworks\PHP\Servers:
在Preference\Languages & Frameworks\PHP\Debug\DBGp Proxy:
在Preference\Languages & Frameworks\PHP\Debug:
在Run\Edit Configurations\Defaults\PHP Remote Debug:
在上述配置都完成了之后,點擊Run\Start Listening on PHP Debug Connecting按鈕就可以進行單步調試了。