NetBeans+Xdebug調試原理

使用Xdebug的遠程調試,Xdebug做爲一個嵌入到PHP的程序,扮演着客戶端的角色,而IDE則做爲服務器。下面的動態圖展現了鏈接創建的過程。php

鏈接創建過程

  • 服務端的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指令的話,鏈接的創建過程是不一樣的:html

鏈接創建過程

  • 服務端的IP是10.0.1.2, 端口爲80
  • IDE運行在一個動態IP的計算機上,所以設置xdebug.remote_connect_back爲1
  • IDE監聽端口 9000, 所以,配置xdebug.remote_port 爲9000
  • 發送HTTP請求,Xdebug檢測HTTP header中的IP地址
  • 調試開始運行,產生HTTP響應

多用戶調試

Xdebug只容許你使用指定的IP地址(xdebug.remote_host)進行遠程調試鏈接.他不會自動的鏈接回瀏覽器運行訪問的機器IP,除非你是用xdebug.remote_connect_back指令。apache

若是你的開發者們在同一個服務器上的不一樣的項目上面進行開發,你能夠使用Apache的每一個目錄中的.htaccess功能指定xdebug.remote_host指令,配置php_value xdebug.remote_host=10.0.0.5。 可是,若是是多個開發者在一樣的代碼上進行開發的話,.htaccess將沒法完成該項功能。瀏覽器

針對這個問題,這裏有兩個解決方案。第一個是你能夠使用DGBp代理,對於如何使用這個代理,請查看多用戶調試這篇文章。你能夠在 ActiveState的站點 下載這個代理。這裏有更多的文檔在Komodo FAQ.服務器

第二個方案是能夠使用xdebug.remote_connect_back配置項(Xdebug 2.1以後引入)。ide

更多參考:spa

https://blog.csdn.net/21aspnet/article/details/47756651.net

 

下面用圖說明Netbeans+Xdebug調試過程當中,Xdebug扮演着客戶端的角色,而IDE則做爲服務器debug



而Xdebug完或結束調試後,Xdebug才把php處理結果交給apache,apache經過頁面形式展現給用戶,能夠經過tail -f access.log驗證。debug結束前無access日誌,結束後產生相應access日誌。

 

特別說明:代理

netbeans+xdebug單步調試遇PHP致命錯誤終止執行,單點調試也會隨即停掉
相關文章
相關標籤/搜索