一、安裝Xdebug
在Xdebug官網(wǎng)下載頁可以下載xdebug,可以根據(jù)自己的PHP版本下載對應(yīng)的xdebug版本,需要注意的有三個(gè)關(guān)鍵點(diǎn):
- PHP版本號 5.x 還是 7.x
- 32位還是64位
- TS(線程安全)還是NTS(非線程安全)
如果不太清楚自己的PHP版本,可以點(diǎn)擊下圖所示紅框內(nèi)的鏈接,分析phpinfo打印的信息相叁,自動(dòng)提供對應(yīng)的下載版本
瀏覽器打開phpinfo信息,ctrl + a
全選 辽幌,ctrl + c
復(fù)制
ctrl + v
粘貼到分析頁面的輸入框內(nèi)增淹,點(diǎn)擊分析按鈕
按照分析結(jié)果給出的指示,一步一步完成就好了乌企。這里分析后的路徑都是正確的虑润,對應(yīng)了你本機(jī)的路徑。
重啟服務(wù)器后再次打開phpinfo加酵,驗(yàn)證安裝是否成功拳喻,ctrl + F
搜索 xdebug關(guān)鍵字,顯示如下版本信息即安裝成功
二猪腕、配置xdebug
本文開啟的配置如下
[XDebug]
xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug"
xdebug.trace_output_dir="D:\phpStudy\tmp\xdebug"
zend_extension="D:\phpStudy\php\php-7.1.27\ext\php_xdebug.dll"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = localhost
xdebug.remote_mode = req
xdebug.remote_handler = dbgp
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM
【xdebug配置說明】
開啟Xdebug方式的錯(cuò)誤提示:
只要啟用了xdebug擴(kuò)展那么該功能是默認(rèn)開啟的冗澈,將以xdebug的風(fēng)格進(jìn)行錯(cuò)誤顯示,如果想以原php的風(fēng)格顯示可以在配置文件中設(shè)置:xdebug.default_enable=0陋葡,注意該設(shè)置項(xiàng)并不是指關(guān)閉xdebug的所有功能
配置大變量的顯示:
在有些程序中變量會很大亚亲,比如著名內(nèi)容管理系統(tǒng)drupal8中的節(jié)點(diǎn)渲染數(shù)組,如果直接print_r
那么可以將內(nèi)存8G的I5計(jì)算機(jī)卡死腐缤,所以Xdebug提供了配置大變量打印配置以避免這種情況捌归,配置以下配置項(xiàng):
xdebug.var_display_max_children
整數(shù),默認(rèn)128
岭粤,顯示的數(shù)組子元素或?qū)ο髮傩缘淖畲髷?shù)量惜索,不限制則設(shè)定為-1
,遠(yuǎn)程調(diào)試時(shí)不受影響
xdebug.var_display_max_data
整數(shù)剃浇,默認(rèn)512
巾兆,顯示字符串的最大長度,不限設(shè)置為-1
偿渡,不影響遠(yuǎn)程調(diào)試
xdebug.var_display_max_depth
整數(shù)臼寄,默認(rèn)3
,顯示數(shù)組或?qū)ο髮傩詴r(shí)的最大嵌套深度溜宽,最大1023
吉拳,可以用-1
指代這個(gè)最大數(shù)
最大遞歸保護(hù):
設(shè)定以下配置項(xiàng):
xdebug.max_nesting_level
整數(shù),默認(rèn)為:256
适揉,不限設(shè)置為-1
,無限遞歸的保護(hù)機(jī)制,當(dāng)遞歸調(diào)用達(dá)到該設(shè)定時(shí)程序被中斷笛质,注意此時(shí)不會出現(xiàn)任何錯(cuò)誤提示,而是直接退出程序
函數(shù)調(diào)用追蹤:
包括對象方法調(diào)用魄揉,該功能默認(rèn)是關(guān)閉的,開啟后將輸出調(diào)用數(shù)據(jù)到一個(gè)文件拭宁,查看文件即可洛退,配置如下(這里值設(shè)定為我們最常用的情況以便復(fù)制使用,更多見下文的配置說明):
xdebug.auto_trace=1
;開啟追蹤杰标,默認(rèn)是關(guān)閉的
xdebug.trace_output_dir="C:\root\xdebug\trace"
;調(diào)用追蹤數(shù)據(jù)輸出目錄
xdebug.trace_output_name="yunke.%s.%u"
;追蹤文件的文件名
xdebug.collect_params=4
;收集函數(shù)參數(shù)的形式
xdebug.collect_return=1
;是否收集函數(shù)返回值
xdebug.show_mem_delta=1
;顯示內(nèi)存詳情
xdebug.trace_format=0
;追蹤文件的格式
以上設(shè)置將為所有請求產(chǎn)生分析文件兵怯,調(diào)用追蹤分析還可以采用變量觸發(fā)的方式(可通過瀏覽器擴(kuò)展自動(dòng)完成,這也是推薦方法腔剂,見下)媒区,也就是在GET/POST
或COOKIE
中設(shè)置變量名XDEBUG_TRACE
,它的值是和以下設(shè)置項(xiàng)匹配的密鑰掸犬,配置如下:
xdebug.auto_trace=0
;開啟變量觸發(fā)跟蹤時(shí)自動(dòng)跟蹤需要關(guān)閉
xdebug.trace_enable_trigger=1
xdebug.trace_enable_trigger_value="yunke"
;這就是上述XDEBUG_TRACE
變量的值
如訪問網(wǎng)址:http://www.test.com/index.php?XDEBUG_TRACE=yunke袜漩,即可觸發(fā)追蹤文件的產(chǎn)生
這里"yunke"是一個(gè)密鑰值,只有和配置文件匹配才能產(chǎn)生分析文件湾碎,默認(rèn)為空字符
代碼覆蓋分析:
該功能可以讓我們知道代碼執(zhí)行中哪些行被執(zhí)行到了宙攻,通常用于單元測試,配置如下:
xdebug.coverage_enable=1
;代碼覆蓋分析開啟
代碼覆蓋分析是通過在php代碼中調(diào)用函數(shù)來進(jìn)行的介褥,過程如下粘优,那將得到一個(gè)數(shù)組結(jié)果:
xdebug_start_code_coverage();//開啟覆寫
…//被分析的一些代碼
var_dump(xdebug_get_code_coverage());//得到一個(gè)分析結(jié)果數(shù)組
垃圾回收分析:
該功能默認(rèn)是關(guān)閉的,開啟后將輸出垃圾回收分析數(shù)據(jù)到一個(gè)文件呻顽,查看文件即可,配置如下(這里值設(shè)定為我們最常用的情況以便復(fù)制使用丹墨,更多見下文的配置說明):
xdebug.gc_stats_enable=1
;開啟垃圾回收分析
xdebug.gc_stats_output_dir="C:\root\xdebug\gc"
;數(shù)據(jù)輸出目錄廊遍,默認(rèn)是/tmp
xdebug.gc_stats_output_name=”gcstats.%s.%u”
;輸出文件名,默認(rèn)是: gcstats.%p
程序性能分析:
該功能默認(rèn)是關(guān)閉的贩挣,開啟后將輸出性能分析數(shù)據(jù)到一個(gè)文件喉前,該文件是便于機(jī)器解析的文本格式,需要專用軟件查看王财,配置如下(這里值設(shè)定為我們最常用的情況以便復(fù)制使用卵迂,更多見下文的配置說明):
xdebug.profiler_enable=1
;開啟性能分析
xdebug.profiler_output_dir="C:\root\xdebug\profiler"
;性能分析文件輸出目錄
xdebug.profiler_output_name="cachegrind.out.%s.%u"
;性能分析輸出文件名
以上設(shè)置將為所有請求產(chǎn)生分析文件,性能分析還可以采用變量觸發(fā)的方式(可通過瀏覽器擴(kuò)展自動(dòng)完成绒净,這也是推薦方法见咒,見下),也就是在GET/POST
或COOKIE
中設(shè)置變量名XDEBUG_PROFILE
挂疆,它的值是和以下設(shè)置項(xiàng)匹配的密鑰改览,配置如下:
xdebug.profiler_enable=0
;開啟變量觸發(fā)分析時(shí)自動(dòng)分析需要關(guān)閉
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable_trigger_value="yunke"
;這就是上述XDEBUG_PROFILE
變量的值
即可觸發(fā)分析文件的產(chǎn)生下翎,如訪問網(wǎng)址:http://www.test.com/index.php?XDEBUG_PROFILE=yunke
這里"yunke"是一個(gè)密鑰值,只有和配置文件匹配才能產(chǎn)生分析文件宝当,默認(rèn)為空字符
在官網(wǎng)介紹了許多種軟件來查看輸出的分析文件视事,其中WinCacheGrind
在小型程序分析中尚可,大型程序就力不從心了庆揩,甚至?xí)霈F(xiàn)錯(cuò)誤俐东,經(jīng)云客測試采用QCacheGrind
效果最好,它是KCacheGrind
的Windows版本订晌,這里對該軟件做一個(gè)簡單介紹:
打開后左邊有一個(gè)“Flat Profile”面板虏辫,里面第一列“Incl.”是執(zhí)行時(shí)間,包括內(nèi)部調(diào)用的子程序的時(shí)間腾仅;Self列是自身消耗的時(shí)間乒裆,不包括子函數(shù)調(diào)用;Called列是該函數(shù)被調(diào)用的次數(shù)推励;Function是函數(shù)名鹤耍;Location列是文件位置;
時(shí)間是以微秒為單位1秒=1000000 微秒(μs)验辞,以可以采用百分比的方式
遠(yuǎn)程調(diào)試:
我們先看一下遠(yuǎn)程調(diào)試的整個(gè)過程稿黄,首先由瀏覽器附帶特殊參數(shù)打開要調(diào)試的腳本,腳本開始運(yùn)行跌造,此時(shí)Xdebug會主動(dòng)向配置好的調(diào)試客戶端發(fā)起一個(gè)連接杆怕,并采用DBGp協(xié)議和調(diào)試客戶端交互(調(diào)試客戶端往往就是我們使用的IDE,如phpstorm壳贪,它需要監(jiān)聽調(diào)試網(wǎng)絡(luò)端口)陵珍,調(diào)試客戶端通過協(xié)議讓Xdebug一步一步的執(zhí)行代碼,顯示或設(shè)置程序中的變量內(nèi)容违施,在每一步之間Xdebug將php程序掛起暫停執(zhí)行互纯,這個(gè)“步”又叫斷點(diǎn),調(diào)試客戶端可以通過設(shè)置斷點(diǎn)來讓程序在該處暫停磕蒲,對于調(diào)試客戶端而言這又叫做斷點(diǎn)調(diào)試留潦,整個(gè)過程而言是Xdebug在php引擎里一步一步的執(zhí)行代碼并操作這個(gè)過程,她接收調(diào)試客戶端的指令辣往。
要進(jìn)行遠(yuǎn)程調(diào)試具體操作如下兔院,首先需要以下配置并重啟php:
xdebug.remote_enable=1
;遠(yuǎn)程調(diào)試開關(guān)
xdebug.remote_host=localhost
;遠(yuǎn)程調(diào)試客戶端主機(jī)地址,也就是IDE所在主機(jī)的地址站削,往往就是localhost
xdebug.remote_port=9000
;遠(yuǎn)程調(diào)試端口
配置好后坊萝,我們在瀏覽器中打開腳本,打開時(shí)需要發(fā)送GET/POST
變量名XDEBUG_SESSION_START
或者COOKIE
變量名XDEBUG_SESSION
,其值是Xdebug和調(diào)試客戶端的通信會話id屹堰,往往是ide指定的一個(gè)特殊字符肛冶,如phpstorm指定為“PHPSTORM
”,該值可以在xdebug.idekey
配置中設(shè)定扯键,默認(rèn)為空字符串睦袖;瀏覽器附加的參數(shù)可以通過瀏覽器擴(kuò)展自動(dòng)完成(見下);服務(wù)器收到請求后依據(jù)xdebug.remote_mode
配置項(xiàng)的設(shè)定開始調(diào)試過程荣刑,該配置項(xiàng)如果是“req
”那么腳本剛啟動(dòng)時(shí)Xdebug就向調(diào)試客戶端(IDE)發(fā)起調(diào)試連接馅笙,這也是默認(rèn)值,如果是“jit
”那么僅在有錯(cuò)誤出現(xiàn)時(shí)才發(fā)起連接厉亏,一旦和IDE的連接建立成功那么就采用DBGp協(xié)議進(jìn)行調(diào)試交互董习。
如果服務(wù)器是被多個(gè)開發(fā)者共享的,那么調(diào)試客戶機(jī)會有多個(gè)爱只,而xdebug.remote_host
配置項(xiàng)只能設(shè)定一個(gè)皿淋,此時(shí)可以將xdebug.remote_connect_back
設(shè)定為1
,那將采用從http頭中獲取的ip來作為調(diào)試客戶機(jī)的地址恬试。
Xdebug在發(fā)起調(diào)試連接時(shí)默認(rèn)超時(shí)時(shí)間為200毫秒窝趣,該值在xdebug.remote_timeout
配置項(xiàng)中設(shè)置,在本機(jī)調(diào)試該值足夠了训柴,如果是遠(yuǎn)程的網(wǎng)絡(luò)主機(jī)那么需要加大該值以應(yīng)對網(wǎng)絡(luò)延遲哑舒。
瀏覽器插件輔助:
如前文所述,觸發(fā)方式產(chǎn)生分析幻馁、追蹤文件和開啟遠(yuǎn)程調(diào)試都需要在GET/POST
或COOKIE
里面設(shè)置特定變量和值洗鸵,那么我們能否讓瀏覽器代勞呢,這是可以的仗嗦,這里以開發(fā)者使用最多的火狐瀏覽器為列來說明:
先安裝輔助插件膘滨,打開地址:https://addons.mozilla.org/en-GB/firefox/addon/xdebug-helper-for-firefox/
你將看到Xdebug Helper for Firefox
,點(diǎn)擊Add to Firefox稀拐,按照提示操作即可
安裝完成后需要進(jìn)行配置:按組合鍵“ctrl+shift+a
”打開附加組件面板吏祸,找到Xdebug Helper,點(diǎn)擊選項(xiàng)钩蚊,分別輸入IDE遠(yuǎn)程會話id、分析密鑰蹈矮、追蹤密鑰(對應(yīng)配置中xdebug.idekey
砰逻、xdebug.profiler_enable_trigger_value
、xdebug.trace_enable_trigger_value
)泛鸟,點(diǎn)擊保存蝠咆,此時(shí)新開網(wǎng)頁的瀏覽器地址欄中將出現(xiàn)一個(gè)爬蟲圖標(biāo),可以選擇四種狀態(tài):調(diào)試、分析刚操、追蹤闸翅、禁用,前三種種狀態(tài)下瀏覽器打開連接時(shí)會附帶額外的cookie參數(shù)菊霜,比如我們選擇分析坚冀,那么刷新連接時(shí)將在cookie中添加XDEBUG_PROFILE
變量,值為前文設(shè)定的密鑰值鉴逞,這將讓Xdebug產(chǎn)生分析文件记某,函數(shù)追蹤和遠(yuǎn)程調(diào)試同理。
【常用配置】
全部設(shè)置及詳細(xì)見:https://xdebug.org/docs/all_settings构捡,本文只進(jìn)行大概介紹
xdebug.trace_output_dir
函數(shù)調(diào)用跟蹤數(shù)據(jù)文件的寫入目錄液南,默認(rèn)為 /tmp,確惫椿眨可寫
xdebug.trace_output_name
追蹤文件的文件名指引滑凉,默認(rèn)為:trace.%c
比如:yunke.%s.%u
將輸出帶路徑的腳步名及帶微秒的時(shí)間,如下:
yunke.C__root_test_index_php.1520473784_260486.xt
xdebug.auto_trace
開啟函數(shù)調(diào)用追蹤喘帚,布爾值畅姊,默認(rèn)為0
xdebug.collect_assignments
布爾值,默認(rèn)為0
啥辨,是否在函數(shù)追蹤中添加變量賦值
xdebug.collect_includes
布爾值涡匀,默認(rèn)為1
,是否將include()
, include_once()
, require()
or require_once()
的文件寫入追蹤文件
xdebug.collect_params
整數(shù)溉知,默認(rèn)0
陨瘩,決定函數(shù)追蹤的參數(shù)收集,0
為不收集级乍,1
參數(shù)的類型和數(shù)量舌劳,2
在1基礎(chǔ)上加工具提示信息,3
全變量內(nèi)容(受到變量輸出設(shè)置的影響)玫荣,4
全變量內(nèi)容和變量名甚淡,5
php序列化內(nèi)容沒有變量名
xdebug.collect_return
布爾值,默認(rèn)0
捅厂,是否寫入函數(shù)調(diào)用的返回值到追蹤文件
xdebug.show_mem_delta
整數(shù)贯卦,默認(rèn)為0
,非0值將顯示函數(shù)調(diào)用的內(nèi)存用量信息
xdebug.trace_format
整型焙贷,默認(rèn)0
撵割,追蹤文件的格式,0
為人類可讀格式(時(shí)間索引辙芍,內(nèi)存用量等等)1
機(jī)器易讀格式 2
人類可讀格式以網(wǎng)頁展現(xiàn)
xdebug.trace_options
整數(shù)啡彬,默認(rèn)為0
羹与,如果設(shè)置為1
,那么追蹤文件采用追加方式庶灿,而不是覆蓋
xdebug.var_display_max_children
整數(shù)纵搁,默認(rèn)128
,顯示的數(shù)組子元素或?qū)ο髮傩缘淖畲髷?shù)量往踢,不限制設(shè)定為-1
腾誉,遠(yuǎn)程調(diào)試時(shí)不受影響
xdebug.var_display_max_data
整數(shù),默認(rèn)512
菲语,顯示字符串的最大長度妄辩,不限設(shè)置為-1
,不影響遠(yuǎn)程調(diào)試
xdebug.var_display_max_depth
整數(shù)山上,默認(rèn)3
眼耀,顯示數(shù)組或?qū)ο髮傩詴r(shí)的最大嵌套深度,最大1023
佩憾,可以用-1
指代這個(gè)最大數(shù)
xdebug.coverage_enable
布爾哮伟,默認(rèn)為1
,是否開啟代碼覆蓋分析妄帘,實(shí)測該設(shè)置項(xiàng)無效楞黄,開啟和得到分析結(jié)果需用函數(shù)
xdebug.gc_stats_enable
布爾值,默認(rèn)為0
抡驼,是否開啟垃圾回收統(tǒng)計(jì)分析
xdebug.gc_stats_output_dir
垃圾統(tǒng)計(jì)分析的寫入目錄鬼廓,注意權(quán)限
xdebug.gc_stats_output_name
垃圾分析文件的文件名,和追蹤分析的文件名規(guī)則一樣
xdebug.profiler_enable
整數(shù)致盟,默認(rèn)為0
碎税,為1
時(shí)將開啟性能分析功能
xdebug.profiler_aggregate
整數(shù),默認(rèn)0
馏锡,非0
時(shí)將多個(gè)請求的分析數(shù)據(jù)寫入一個(gè)文件中以進(jìn)行跨請求分析
xdebug.profiler_append
整數(shù)雷蹂,默認(rèn)0
,分析文件是否采用追加模式杯道,文件名的設(shè)定對該項(xiàng)有影響
xdebug.profiler_enable_trigger
整數(shù)匪煌,默認(rèn)為0,采用觸發(fā)模式開啟分析功能党巾,開啟它時(shí)需要關(guān)閉xdebug.profiler_enable
xdebug.profiler_enable_trigger_value
字符串萎庭。默認(rèn)為“”,觸發(fā)分析的密鑰齿拂,配合xdebug.profiler_enable_trigger
使用
xdebug.profiler_output_dir
字符串驳规,默認(rèn)為/tmp
,分析文件輸出目錄
xdebug.profiler_output_name
分析文件名稱创肥,默認(rèn)為cachegrind.out.%p
,見xdebug.trace_output_name
xdebug.extended_info
整型,默認(rèn)為1
叹侄,是否強(qiáng)制php
解析器執(zhí)行extended_info
模式
xdebug.idekey
字符串巩搏,默認(rèn):*complex*
,調(diào)試會話id趾代,經(jīng)測試瀏覽器發(fā)送任意值均可開始調(diào)試贯底,所以她并非密鑰值,但有些調(diào)試客戶端可以通過它來判斷是否接受調(diào)試連接撒强,所以最好統(tǒng)一
xdebug.remote_addr_header
默認(rèn)為空字符串“”禽捆,用以指定哪個(gè)http頭代表調(diào)試客戶端地址,和xdebug.remote_connect_back
組合使用
xdebug.remote_autostart
布爾值飘哨,默認(rèn)0
胚想,通常使用特定變量開始遠(yuǎn)程調(diào)試,如果該項(xiàng)被設(shè)置為1
芽隆,那么總是開啟
xdebug.remote_connect_back
布爾值浊服,默認(rèn)0
,解決多人調(diào)試問題胚吁,忽略設(shè)定的固定ip牙躺,指示服務(wù)器依據(jù)請求地址鏈接
xdebug.remote_cookie_expire_time
整數(shù)。默認(rèn)3600
腕扶,遠(yuǎn)程調(diào)試cookie超期時(shí)間
xdebug.remote_enable
布爾值孽拷,默認(rèn)0
,是否啟用遠(yuǎn)程調(diào)試
xdebug.remote_host
字符串半抱,默認(rèn):localhost
脓恕,遠(yuǎn)程調(diào)試客戶端的地址
xdebug.remote_log
字符串,默認(rèn)空代虾,遠(yuǎn)程調(diào)試日志文件名
xdebug.remote_mode
字符串进肯,遠(yuǎn)程調(diào)試默認(rèn),req
腳本一啟動(dòng)就鏈接棉磨,jit
當(dāng)錯(cuò)誤發(fā)生時(shí)鏈接
xdebug.remote_port
遠(yuǎn)程調(diào)試端主機(jī)端口江掩,默認(rèn)9000
xdebug.remote_timeout
整數(shù),默認(rèn)200
乘瓤,單位毫秒环形,等待調(diào)試鏈接的時(shí)間
xdebug.default_enable
布爾值,1
或0
衙傀,開啟以xdebug的方式進(jìn)行錯(cuò)誤提示抬吟,默認(rèn)開啟
xdebug.max_nesting_level
整數(shù),默認(rèn)為:256
统抬,無限遞歸的保護(hù)機(jī)制火本,當(dāng)遞歸調(diào)用達(dá)到該設(shè)定時(shí)程序被中斷
xdebug.max_stack_frames
整數(shù)危队,默認(rèn)值-1
,設(shè)定錯(cuò)誤提示時(shí)堆棧中有多少個(gè)幀被顯示
xdebug.scream
布爾值钙畔,默認(rèn)為0
茫陆,是否禁用“@
”,以便錯(cuò)誤被強(qiáng)制顯示
xdebug擴(kuò)展開啟后具備的函數(shù):
當(dāng)擴(kuò)展被加載后擎析,php腳本中可以使用以下函數(shù):
(這里只列出部分簿盅,全部請見https://xdebug.org/docs/all_functions)
string xdebug_call_class( [int $depth = 1] )
顯示調(diào)用類
string xdebug_call_file( [int $depth = 1] )
顯示調(diào)用文件
string xdebug_call_function( [int $depth = 1] )
返回調(diào)用函數(shù)
int xdebug_call_line( [int $depth = 1] )
返回調(diào)用行
void xdebug_disable()
禁用堆棧跟蹤
void xdebug_enable()
開啟堆棧跟蹤
bool xdebug_is_enabled()
檢查堆棧跟蹤是否被開啟
string xdebug_get_collected_errors( [int clean] )
從錯(cuò)誤集緩沖中返回所有錯(cuò)誤信息
array xdebug_get_headers()
返回header() 函數(shù)設(shè)置的所有頭信息
int xdebug_memory_usage()
返回內(nèi)存使用量
int xdebug_peak_memory_usage()
返回到目前為止腳本使用過的最大內(nèi)存用量
void xdebug_start_error_collection()
收集錯(cuò)誤并禁止顯示
void xdebug_stop_error_collection()
停止錯(cuò)誤記錄,并從緩沖中收集
float xdebug_time_index()
返回當(dāng)前點(diǎn)的執(zhí)行時(shí)間揍魂,單位秒
xdebug配置解釋部分轉(zhuǎn)載自 php調(diào)試工具Xdebug使用教程
三桨醋、配置PhpStorm
打開PhpStorm 按 ctrl + alt + s
打開設(shè)置界面,配置如下现斋,Debug port 與在php.ini
內(nèi)配置的xdebug.remote_port
對應(yīng)喜最;點(diǎn)擊 apply 保存再點(diǎn) ok 關(guān)閉
接下來配置服務(wù)器,在PhpStorm右上角下拉選擇 “Edit Configurations”
如果沒有服務(wù)器配置步责,需要新建一個(gè)返顺;點(diǎn)擊左上角的加號新建,新建類型我這里選擇的是PHP Web Page
蔓肯,也可以選擇PHP application
再點(diǎn)擊上圖所示右側(cè)的 server 配置服務(wù)器遂鹊,Host根據(jù)實(shí)際情況填寫,本地的話可以填localhost
下面點(diǎn)擊行號的右邊在PHP代碼中打斷點(diǎn)
首先點(diǎn)擊PhpStorm右上角的電話圖標(biāo)蔗包,再點(diǎn)擊蟲子圖標(biāo)秉扑,這時(shí)會打開瀏覽器
可以看到已經(jīng)自動(dòng)在瀏覽器中打開了剛才配置的地址,但是這不是我們想要調(diào)試的頁面调限,現(xiàn)在可以將紅框內(nèi)查詢字符串前面的地址改成所要調(diào)試的地址
保留問號后的查詢字符串舟陆,修改地址后按回車
PhpStorm就會自動(dòng)顯示斷點(diǎn)位置的調(diào)試信息了
至此,PhpStorm + Xdebug 斷點(diǎn)調(diào)試 配置完畢
四耻矮、瀏覽器插件調(diào)試
除了上面所講的利用XDEBUG_SESSION_START
地址欄query_string
傳值的方式秦躯,我們還可以利用COOKIE
傳遞XDEBUG_SESSION
,來使得PhpStorm能夠檢測到我們在瀏覽器發(fā)起的調(diào)試請求裆装。XDEBUG_SESSION
的值就是idekey
的值踱承,可以通過手動(dòng)修改頭信息的方式傳遞COOKIE
,但是這樣就比較麻煩哨免,這時(shí)我們可以借助瀏覽器插件來幫我們設(shè)置COOKIE
茎活。
以Chrome為例,我們可以下載Chrome插件:Xdebug helper
琢唾,建議搭個(gè)梯子到Chrome官方插件商店下載载荔。
添加成功之后鼠標(biāo)右鍵點(diǎn)擊瀏覽器右上角插件欄上的蟲子,進(jìn)入“選項(xiàng)”將IDEKEY
設(shè)置成PHPSTORM
并保存采桃,就可以愉快的開始調(diào)試了
點(diǎn)擊瀏覽器右上角的灰色蟲子懒熙,選擇debug選項(xiàng)丘损,蟲子變?yōu)榫G色就開啟了;
接下來還要開啟PhpStorm監(jiān)聽工扎,點(diǎn)擊PhpStorm右上角的電話按鈕号俐,變成如下樣式就代表開啟了監(jiān)聽。與之前不同的是定庵,使用瀏覽器插件調(diào)試時(shí)不需要點(diǎn)擊PhpStorm右上角的蟲子獲取ID。
打斷點(diǎn)后運(yùn)行踪危,就可以看到調(diào)試信息了