PhpStorm + Xdebug斷點(diǎn)調(diào)試

一、安裝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)的下載版本

xdebug下載

瀏覽器打開phpinfo信息,ctrl + a全選 辽幌,ctrl + c 復(fù)制

phpinfo

ctrl + v粘貼到分析頁面的輸入框內(nèi)增淹,點(diǎn)擊分析按鈕

分析phpinfo

按照分析結(jié)果給出的指示,一步一步完成就好了乌企。這里分析后的路徑都是正確的虑润,對應(yīng)了你本機(jī)的路徑。


分析結(jié)果

php.ini配置

重啟服務(wù)器后再次打開phpinfo加酵,驗(yàn)證安裝是否成功拳喻,ctrl + F 搜索 xdebug關(guān)鍵字,顯示如下版本信息即安裝成功

xdebug

二猪腕、配置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/POSTCOOKIE中設(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/POSTCOOKIE中設(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/POSTCOOKIE里面設(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_valuexdebug.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)容和變量名甚淡,5php序列化內(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
布爾值,10衙傀,開啟以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)閉

image.png

接下來配置服務(wù)器,在PhpStorm右上角下拉選擇 “Edit Configurations”


image.png

如果沒有服務(wù)器配置步责,需要新建一個(gè)返顺;點(diǎn)擊左上角的加號新建,新建類型我這里選擇的是PHP Web Page 蔓肯,也可以選擇PHP application

image.png

再點(diǎn)擊上圖所示右側(cè)的 server 配置服務(wù)器遂鹊,Host根據(jù)實(shí)際情況填寫,本地的話可以填localhost

image.png

下面點(diǎn)擊行號的右邊在PHP代碼中打斷點(diǎn)


image.png

首先點(diǎn)擊PhpStorm右上角的電話圖標(biāo)蔗包,再點(diǎn)擊蟲子圖標(biāo)秉扑,這時(shí)會打開瀏覽器

image.png

可以看到已經(jīng)自動(dòng)在瀏覽器中打開了剛才配置的地址,但是這不是我們想要調(diào)試的頁面调限,現(xiàn)在可以將紅框內(nèi)查詢字符串前面的地址改成所要調(diào)試的地址


image.png

保留問號后的查詢字符串舟陆,修改地址后按回車


修改地址

PhpStorm就會自動(dòng)顯示斷點(diǎn)位置的調(diào)試信息了


image.png

至此,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官方插件商店下載载荔。

xdebug helper

添加成功之后鼠標(biāo)右鍵點(diǎn)擊瀏覽器右上角插件欄上的蟲子,進(jìn)入“選項(xiàng)”將IDEKEY設(shè)置成PHPSTORM并保存采桃,就可以愉快的開始調(diào)試了

xdebug helper

點(diǎn)擊瀏覽器右上角的灰色蟲子懒熙,選擇debug選項(xiàng)丘损,蟲子變?yōu)榫G色就開啟了;

xdebug helper

接下來還要開啟PhpStorm監(jiān)聽工扎,點(diǎn)擊PhpStorm右上角的電話按鈕号俐,變成如下樣式就代表開啟了監(jiān)聽。與之前不同的是定庵,使用瀏覽器插件調(diào)試時(shí)不需要點(diǎn)擊PhpStorm右上角的蟲子獲取ID。

PhpStorm

打斷點(diǎn)后運(yùn)行踪危,就可以看到調(diào)試信息了


斷點(diǎn)調(diào)試
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔬浙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贞远,更是在濱河造成了極大的恐慌畴博,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡僚祷,警方通過查閱死者的電腦和手機(jī)宁脊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爪瓜,“玉大人,你說我怎么就攤上這事。” “怎么了果元?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵促王,是天一觀的道長。 經(jīng)常有香客問我而晒,道長蝇狼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任倡怎,我火速辦了婚禮迅耘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诈胜。我一直安慰自己豹障,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布焦匈。 她就那樣靜靜地躺著血公,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缓熟。 梳的紋絲不亂的頭發(fā)上累魔,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天摔笤,我揣著相機(jī)與錄音,去河邊找鬼垦写。 笑死吕世,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梯投。 我是一名探鬼主播命辖,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼分蓖!你這毒婦竟也來了尔艇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤么鹤,失蹤者是張志新(化名)和其女友劉穎终娃,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒸甜,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棠耕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柠新。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窍荧。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恨憎,靈堂內(nèi)的尸體忽然破棺而出搅荞,到底是詐尸還是另有隱情,我是刑警寧澤框咙,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布咕痛,位于F島的核電站,受9級特大地震影響喇嘱,放射性物質(zhì)發(fā)生泄漏茉贡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一者铜、第九天 我趴在偏房一處隱蔽的房頂上張望腔丧。 院中可真熱鬧,春花似錦作烟、人聲如沸愉粤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衣厘。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間影暴,已是汗流浹背错邦。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留型宙,地道東北人撬呢。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像妆兑,于是被迫代替她去往敵國和親魂拦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容