Xdebug文檔(七) 遠端偵錯,xdebug文檔調試
Xdebug提示調試用戶端介面與PHP運行相聯絡。該章節解釋如何設定PHP與xdebug,並推薦一些用戶端。
介紹
Xdebug的遠端偵錯工具允許你檢查資料結構,互動式地穿過和調試你的代碼。該協議已經開放,名叫DBGp。該協議在xdebug2中實現,並代替舊版GDB類似協議並不再支援。
用戶端
Xdebug2捆綁了一個使用DBGp協議簡單命令列工具。還有一些其他用戶端都做得很好(免費或商業的)。
- Dev-PHP (IDE: Windows)
- Eclipse plugin (IDE).
- Emacs plugin (Editor Plugin).
- KDevelop (IDE: Linux (KDE); Open Source).
- ActiveState's Komodo (IDE: Windows, Linux, Mac; Commercial).
- MacGDBP (Standalone client for Mac OS X; Free)
- NetBeans (IDE: Windows, Linux, Mac OS X and Solaris).
- Notepad++ plugin (Editor: Windows).
- WaterProof's PHPEdit (IDE, from version 2.10: Windows; Commercial).
- PHPEclipse (Editor Plugin).
- Devsense's PHP Tools for Visual Studio (MS Visual Studio Plugin; Commercial).
- JetBrain's PhpStorm (IDE; Commercial).
- Protoeditor (Editor: Linux).
- pugdebug (Standalone client for Linux, Windows and Mac OS X; Open Source).
- VIM plugin (Editor Plugin).
- jcx software's VS.Php (MS Visual Studio Plugin; Commercial).
- Xdebug Chrome App (Chrome Application; Open Source)
- XDebugClient (Standalone client for Windows).
用於調試的簡單命令列工具綁定於xdebug所在的 debugclient 目錄中。
啟動調試器
要使xdebug調試器生效,你需要在php.ini配置一些設定。這類設定有xdebug.remote_enable開啟調試器,xdebug.remote_host和xdebug.remote_port配置IP地址和連接埠以便調試器串連。還有xdebug.remote_connect_back設定用於程式開發伺服器共用給多名開發人員使用。
如果你需要調試器在錯誤發生時(PHP錯誤或exception)發起一會話,你也需要改變xdebug.remot_mode設定。該設定允許值是”req”(預設),高度器會在指令碼一開始就發起一會話,或”jit”值讓會話值在錯誤發生時產生。
做好所有這些設定後,xdebug仍未能在指令碼一運行時自動開始偵錯工作階段。你有三個方法啟用xdebug調試器:
1、 當在命令列中運行指令碼,你需要設定以環境變數:
export XDEBUG_CONFIG="idekey=session_name"
php myscript.php
你也能配置 xdebug.remote_host, xdebug.remote_port, xdebug.remote_mode 和xdebug.remote_handler 為相同的環境變數只要在隔離這些值在一個空間內:
export XDEBUG_CONFIG="idekey=session_name remote_host=localhost profiler_enable=1"
所有設定你都能在php.ini通過XDEBUG_CONFIG設定。
2、 如果你想在瀏覽器調試指令碼,只需要URL添加 XDEBUG_SESSION_START=session_name參數。要替代GET參數也可以設定XDEBUG_SESSTION_START為POST參數,或是COOKIE參數。詳情請參考下一章節。
3、 要在瀏覽器運行PHP並啟用調試器需安裝以下瀏覽器外掛程式。每種外掛程式都能讓你簡單點下按鈕就開啟調試器。當這些外掛程式啟用,它們會直接設定XDEBUG_SESSION的cookie值,代替XDEBUG_SESSION_START。
The easiest Xdebug
Firefox外掛程式擁有IDE介面更容易方便調試。外掛程式地址: https://addons.mozilla.org/en-US/firefox/addon/the-easiest-xdebug/.
Xdebug Helper for Chrome
Chrome外掛程式只需一鍵協助你開啟或關閉調試。外掛程式地址:https://chrome.google.com/extensions/detail/eadndfjplgieldjbigjakmdgkmoaaaoc.
Xdebug Toggler for Safari
Safari外掛程式能自動開啟Xdebug調試。Github地址: https://github.com/benmatselby/xdebug-toggler.
Xdebug launcher for Opera
Opera外掛程式允許你開啟一xdebug偵錯工作階段。
在你運行指令碼,你要讓你的用戶端能接收調試串連,請參考文章指明用戶端需要如何配置的內容。使用捆綁的簡易用戶端請參考編譯和安裝一章。你可以用於支行“調試用戶端”。
當調試用戶端啟動,它會顯示以下資訊並等待串連被調試伺服器接收:
Xdebug Simple DBGp client (0.10.0)
Copyright 2002-2007 by Derick Rethans.
- libedit support: enabled
Waiting for debug server to connect.
當串連形成,調試伺服器將輸出以下資訊:
Connect
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
fileuri="file:///home/httpd/www.xdebug.org/html/docs/index.php"
language="PHP"
protocol_version="1.0"
appid="13202"
idekey="derick">
Xdebug
Derick Rethans
http://xdebug.org
Copyright (c) 2002-2007 by Derick Rethans
(cmd)
現在你能用有關DBGp的一些命令集。當指令碼運行結束,調試伺服器關閉與用戶端串連。調試用戶端恢複等待新的串連。
通訊設定
靜態IP/單一開發
遠端調試時,內建於php的xdebug扮演了用戶端,而IDE充當了伺服器。以下動圖展示了通訊頻道的建立:
- 伺服器IP為10.0.1.2 ,HTTP連接埠80
- IDE所在IP 10.0.1.42, 因此 xdebug.remote_host 設定為10.0.1.42
- IDE偵聽連接埠9000, 因此 xdebug.remote_port 設為 9000
- HTTP請求在IDE所在的機器上啟動。
- Xdebug串連到10.0.1.42:9000
- 調試開始,HTTP提供回應。
未知IP/多名開發人員
如果xdebug.remote_connect_back利用了,其串連方式有些不同:
- 伺服器IP和HTTP連接埠10.0.1.2:80
- IDE所在機器是未知IP,所以 xdebug.remote_connect_back 設為1。
- IDE偵聽連接埠9000,因此 xdebug.remote_port 設為9000
- HTTP請求開始, Xdebug通過HTTP頭部擷取IP地址。
- Xdebug串連擷取到的IP (10.0.1.42)於連接埠9000
- 調試運行,HTTP提供回應。
HTTP偵錯工作階段
Xdebug包含使用cookie對瀏覽器啟動跟蹤偵錯工作階段功能。該工作類似下面步驟:
- 當URL變數XDEBUG_SESSION_START=name附加到URL後,或通過POST傳入相同名稱值——Xdebug發出一cookie值”XDEBUG_SESSION”而該值為URL參數XDEBUG_SESSION_START值。Cookie值有效期間為1小時。DBGp協議也會將相同的值在串連到調試用戶端時傳到初始資料包內的“idekey”屬性。
- XDEBUG_SESSION_START 或XDEBUG_SESSION cookie 一旦設定,Xdebug就會嘗試串連到調試用戶端。
- 要停止偵錯工作階段(和銷毀附帶cookie) 只需簡單地添加URL參數XDEBUG_SESSION_STOP。Xdebug然後不再嘗試建立串連到高度調試用戶端。
多使用者調試
Xdebug只允許遠端偵錯時指定的一個IP地址串連到 xdebug.remote_host。它不能在瀏覽器跑測試的時候連回到瀏覽器所在的機器IP,除非你使用xdebug.remote_connect_back。
如果開發人員們的各種不同項目都放在同一(開發)伺服器上,你可將每個項目通過Apache的.htaccess功能設定php_value xdebug.remote_host=10.0.0.5而使用xdebug.remote_host 設定。
這裡有兩種解決方案。第一,你可以使用DBGp代理。至於如何使用它參考 Debugging with multiple users 章節。你能在ActiveState's web site下載代理軟體作為python遠端調試包的一部分。有關更多文檔位於 Komodo FAQ。
第二是使用xdebug 2.1的xdebug.remote_connect_back設定。
相關設定
xdebug.extended_info
類型: integer, 預設值: 1
控制xdebug是否強制性開啟PHP解析器的“extended_info”模式,這能讓Xdebug在遠端調試上做到檔案/行號斷點調試。當跟蹤或分析指令碼你通常想關閉此選項,因為PHP產生的數組會增加三分之一的大小減慢你的指令碼。該設定只能在php.ini設定,不能在ini_set()內設定。
xdebug.idekey
類型: string, 預設值: *complex*
控制哪種IDE索引值可由xdebug傳遞到DBGp調試處理器。預設情況下是基於設定環境。首先環境設定DBGP_IDEKEY會被考慮,之後是USER和最後的USERNAME。預設值會是找到第一個環境變數。如果確實找不到則該設定是預設“”。如果該值有設定,它通常覆蓋環境變數值。
xdebug.remote_autostart
類型: boolean, 預設值: 0
一般來說要使用一指定的HTTP的GET/POST變數啟動遠端調試(參考 Remote Debugging)。當設定為1時,Xdebug會嘗試啟動一遠端偵錯工作階段並試圖串連到一用戶端,即便是GET/POST/COOKIE變數並不存在。
xdebug.remote_connect_back
類型: boolean, 預設值: 0, 始於 Xdebug > 2.1
如果設定生效, xdebug.remote_host 設定會忽略而Xdebug會嘗試給製造HTTP請求的用戶端進行串連。它會檢查$_SERVER['REMOTE_ADDR'] 變數並找出使用的IP地址。請記住它沒有有效過濾,任何人都能啟動偵錯工作階段串連到伺服器,即使他們的地址並不匹配 xdebug.remote_host.
xdebug.remote_cookie_expire_time
類型: integer, 預設值: 3600, 始於 Xdebug > 2.1
用於增減遠端偵錯工作階段的cookie存在時間。
xdebug.remote_enable
類型: boolean, 預設值: 0
該開關控制Xdebug試圖與調試用戶端通訊,用戶端通過設定 xdebug.remote_host 和 xdebug.remote_port偵聽伺服器和連接埠當。當設定為0,指令碼僅僅是運行而串連不能被建立。
xdebug.remote_handler
類型: string, 預設: dbgp
可改為‘php3’使用舊的PHP3樣式調試器輸出,‘gdb’能使GDB生效類似於調試器介面,或是‘dbgp’使用調試器協議。DBGp協議是唯一支援的協議。
注意:2.1或以上版本只支援’dbgp’作為協議。
xdebug.remote_log
Type: string, Default value:
If set to a value, it is used as filename to a file to which all remote debugger communications are logged. The file is always opened in append-mode, and will therefore not be overwritten by default. There is no concurrency protection available. The format of the file looks something like:
Log opened at 2007-05-27 14:28:15
-> http://www.bkjia.com/PHPjc/1135469.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1135469.htmlTechArticleXdebug文檔(七) 遠端偵錯,xdebug文檔調試 Xdebug提示調試用戶端介面與PHP運行相聯絡。該章節解釋如何設定PHP與xdebug,並推薦一些用戶端。...