程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Xdebug文檔(七) 遠程調試,xdebug文檔調試

Xdebug文檔(七) 遠程調試,xdebug文檔調試

編輯:關於PHP編程

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

<?xml version="1.0" encoding="iso-8859-1"?>

<init xmlns="urn:debugger_protocol_v1"

      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">

  <engine version="2.0.0RC4-dev"><![CDATA[Xdebug]]></engine>

  <author><![CDATA[Derick Rethans]]></author>

  <url><![CDATA[http://xdebug.org]]></url>

  <copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright>

</init>

(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

-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/x ... ight></init>

 

<- step_into -i 1

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/db ... ></response>

 

xdebug.remote_mode

類型: string, 默認值: req

選擇當調試連接的模式。有兩種值:

req

當調試客戶端一啟動腳本運行,Xdebug嘗試連接到調試客戶端。

jit

只有在錯誤發生時,Xdebug才會連接到調試端。

 

xdebug.remote_port

類型: integer, 默認值: 9000

Xdebug試圖連接到遠端服務器的端口。端口9000是默認客戶端與綁定的調試客戶端關連端口。許多客戶端都用此端口號,建議最好不要改。

相關函數

bool xdebug_break()

該函數制造一調試斷點在指定行

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved