摘要:遠程調試分為兩部分調試客戶端和服務端。主動去連接的端口,連接成功后,調試開始。當然,單步調試的另一個好處是可以讓初學者快速掌握項目的架構和執(zhí)行流程。
博客原文鏈接
在使用php調試代碼的時候,我通常都是使用簡單暴力的echo之類的輸出調試。這種調試方法的效率與個人能力正相關,你加一個echo多數是為了驗證自己的一個推測,那么你對代碼越熟悉,你推測的就會越準確,bug解決的就越快,相反則往往如無頭蒼蠅般,東一頭西一頭,不知所謂地輸出一些無意義的調試信息,效率奇低。此時單步調試工具便成了救命稻草,有了它,你可以查看代碼執(zhí)行過程中所有變量的值,心如明鏡,解個bug還不手到擒來。對于php,常用的就是xdebug,我這里就簡單講下IDEA里面如何使用xdebug進行代碼調試。
安裝我們先把xdebug安裝好,由于這里是遠程調試,所以xdebug要安裝到php運行的服務器上,如果php是在本地環(huán)境中,那就直接安裝到本地,官方安裝文檔在這里,我這里簡單講一下Centos 6.6+PHP 5.4的安裝方法。
下載并且編譯xdebug。
下載鏈接-xdebug-2.2.7.tgz
wget http://xdebug.org/files/xdebug-2.2.7.tgz
tar zxvf xdebug-2.2.7.tgz
cd xdebug-2.2.7
phpize&make&make install
修改php配置
在php.ini中增加如下一行:
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
安裝完畢!
運行原理在實際使用前,我們來簡單了解xdebug遠程調試的原理,這樣當xdebug不聽話的時候,我們也知道從哪里收拾它。詳細文檔參見此處。
xdebug遠程調試分為兩部分:調試客戶端和xdebug服務端。前者就是運行我們代碼調試器的地方,我這里是IDEA,后者是xdebug運行的地方。當我們嘗試使用xdebug進行調試時,客戶端會監(jiān)聽一個端口,等待xdebug來連接,一旦連接成功,雙方就開始通信,進行代碼調試。
圖一,源圖
圖一動態(tài)展示了xdebug運行的原理,左邊是調試客戶端,比如IDEA、eclipse之類的IDE,右邊是xdebug,運行按照如下步驟進行:
IDE監(jiān)聽一個調試端口,默認是9000,可以自行配置。
用戶訪問右邊php環(huán)境的server,我們這里使用瀏覽器訪問,一般IDE會自動幫我們在正常的url后面增加XDEBUG_SESSION_START=name的參數。這個參數是用來通知xdebug主動連接IDE的9000端口進行調試的,沒有這個參數,xdebug不會去主動連接IDE,調試也就不會觸發(fā)。
xdebug主動去連接IDE的9000端口, 連接成功后,調試開始。
細心的同學可能會問,xdebug是如何知道IDE監(jiān)聽9000端口的呢?好問題,答案就在配置文件里面。xdebug有兩個配置:remote_host和remote_port,分別代表IDE的ip地址和監(jiān)聽端口。由此可見,IDE和xdebug必須協(xié)商好監(jiān)聽端口。
另一個問題又來了,端口好辦,但是如果我的ip會變化,那我換一個ip,豈不是要修改下xdebug.remote_host配置嗎?好麻煩!!!不知道ip沒關系,xdebug可以自己知道,只要設置xdebug.remote_connect_back為1就可以了,其運行原理見圖二,實現很簡單,xdebug可以從http請求的頭部獲取ip地址,之后就用該ip地址作為remote_host來連接。
圖二,源圖
php.ini配置到這里,相信大家已經基本了解xdebug的原理了,本著好記性不如爛筆頭的準則,這里把我的配置列一下,方便查閱。
[xdebug] zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so xdebug.remote_connect_back=1 xdebug.remote_enable=1 xdebug.remote_port=9444 xdebug.remote_autostart=1 xdebug.profiler_enable=1 xdebug.profiler_output_dir="/home/logs/xdebug/xdebug-profiler"
沒講到的配置,大家自行查閱文檔,太懶會變成豬的!!!
IDEA配置最后一步就是IDEA,也即IDE的配置了。主要有兩方面要配置:
其一,監(jiān)聽端口配置,對于IDEA系列,可以在配置中搜索Debug或者xdebug就能迅速定位了,圖三是我的配置。
圖三
其二,是本地開發(fā)路徑和遠程路徑的映射配置,也就是要讓本地代碼和遠程代碼可以對應起來。配置位置在項目的Run/Debug Configuration里面,也就是去新建一個調試項目,截圖如下。
圖四
圖五
按照圖五中配置好mapping關系后,開始使用xdebug的調試功能吧,告別簡單粗暴甚至低效的echo輸出調試吧!
后記使用echo輸出調試,很多時候是因為開發(fā)者懶,懶得集成調試工具,懶得去優(yōu)化自己的開發(fā)環(huán)境。碰到小bug使用echo還行,一旦遇到詭異bug或者復雜的框架,緊緊靠echo已然無能為力。當然,單步調試的另一個好處是可以讓初學者快速掌握項目的架構和執(zhí)行流程。
書山有路勤為徑,學海無涯苦作舟!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20946.html
摘要:原文鏈接一文掌握本地與遠程調試很久沒寫了同樣很很久沒有用了,近期有個簡單的場景要用到,簡單記錄一下關鍵步驟。配置與本地調試的配置不一樣的地方就是和,其他地方大同小異。 原文鏈接:一文掌握PHP Xdebug 本地與遠程調試 很久沒寫PHP了、同樣很很久沒有用XDebug了,近期有個簡單的場景要用到,簡單記錄一下關鍵步驟。 本地調試 本地環(huán)境: $ php -v PHP 7.3.4 (c...
摘要:前言系統(tǒng)體積比較臃腫,本地跑起來太慢,目前都是本地寫完代碼,提交,然后重新部署開發(fā)集成環(huán)境,如果測試有問題,再通過遠程接入來調試。第一步當然,前提是服務器上要打開遠程調試端口,進行的配置。 前言 WMS系統(tǒng)體積比較臃腫,本地跑起來太慢,目前都是本地寫完代碼,提交,然后重新部署開發(fā)集成環(huán)境,如果測試有問題,再通過遠程接入來調試。所以開發(fā)流程就變成 寫單元測試寫業(yè)務代碼跑單元測試提交代碼,...
摘要:默認關閉如果該設置為,那么將禁用關閉操作符,以便不再隱藏通知警告和錯誤。將寫入垃圾收集統(tǒng)計信息輸出的目錄,確保將運行的用戶具有對該目錄的寫入權限。此設置確定用于將垃圾回收統(tǒng)計信息轉儲到的文件的名稱。 showImg(https://segmentfault.com/img/bVbgEC5?w=480&h=274); 前言 Xdebug是PHP的擴展,用于協(xié)助調試和開發(fā)。 它包含一個用...
摘要:管理工具是一款非常好用的管理和開發(fā)工具。接口調試開發(fā)的一款功能強大的網頁調試與發(fā)送網頁請求。 PHPIDe 我首先力薦PHPstorm10。目前用起來很爽,集成xdebug,集成git進去,當然英文不好的同學在下載個漢化包,在線調試。提供諸于:智能HTML/CSS/JavaScript/PHP編輯、代碼質量分析、調試和測試等功能。另外,它還是跨平臺。 Mysql管理工具 Navicat...
摘要:上一篇容器化開發(fā)環(huán)境已經簡單的介紹了如何容器化開發(fā)環(huán)境。學會斷點調試容器中的應用,再也不用為我那烏黑亮麗的頭發(fā)著急啦原文鏈接 上一篇容器化開發(fā)環(huán)境已經簡單的介紹了如何容器化開發(fā)環(huán)境。在開發(fā)過程中,很多時候都需要通過斷點的方式來調試程序或定位BUG,那么如何斷點調試運行在容器中的應用呢??? 容器就像一個虛擬機,就像一個遠程的服務器,要斷點調試容器中的應用,就像要斷點調試虛擬機和遠程的服...
閱讀 2216·2021-09-07 09:58
閱讀 3391·2019-08-30 14:07
閱讀 1305·2019-08-29 12:32
閱讀 667·2019-08-29 11:06
閱讀 3692·2019-08-26 18:18
閱讀 3731·2019-08-26 17:35
閱讀 1381·2019-08-26 11:35
閱讀 611·2019-08-26 11:35