初次接觸postman是剛學laravel的時候,一直丟在一邊沒用,最近忙公司內部項目,項目使用到的技術棧有Tp Vue ElementUI,由於使用到了前后端分離的架構,有時候在調試的時候也沒難么好調了。
先看看初學時的調試流程吧,哪里報錯 var_dump() 哪里,沒錯,最初 var_dump() 是萬能的,但是有時候這樣效率很低下,不過有一個好處就是你能知道程序完整的執行流程,一步步 var_dump() 下去,能知道哪里數據處理出現了錯誤。
之后接觸了Xdebug,Xdebug可用於PHPstorm的斷點調試,關於PHPstorm的配置,網上很多的配置都大同小異,試了很多都不行,最終參考了這個視頻phpstorm配置。視頻講的很詳細從瀏覽器配置到接口以及到遠程,我這里目前就接觸了前兩個。
瀏覽器端配置:
1.下載Xdebug helper擴展程序(進入谷歌商店搜索即可下載)
2.Xdebug helper配置:在擴展程序選項中選擇IDEkey並配置為PHPStorm(其實可以忽略,視頻里有講為什么,后面也有提到為什么可以忽略)
本地環境配置:我使用的是phpstudy,配置如下。
[xdebug] xdebug.remote_enable=1 xdebug.max_nesting_level=600
其實就兩行,關於phpstorm的配置:xdebug關聯的php版本
端口配置
Servers配置:
配置好后測試xdebug配置是否正確,一般來說應該是這樣子的
好了以后打斷點,並在瀏覽器端啟用擴展程序,請求就可以進來了,接下來如何去調應該很簡單了。
關於調好之后的超時問題
有時候調着調着就超時了,一般為30秒左右,這樣子調試的效率非常低下,為了解決這個問題,我查了蠻多的,改配置文件的timeout似乎沒有用,於是我參考了這篇文章php斷點調試超時設置(適用於Apache),至於nginx,這個目前還沒去研究,按它的配置,好使了,想調多久都可以。
關於接口調試的問題,上面我說了瀏覽器的擴展程序配置選者IDEkey時可以不用配置,這里正好做下解釋。
我們在調試接口時有時候前端和后台是分離的,在兩個完全不同的服務器上,即跨域。我們使用的是Vue,在我們執行 npm run dev之后,會在本地開啟一個服務用來訪問,此時我們的訪問的地址可能是127.0.0.1:8080,127.0.0.1:8090等,然后PHP后台可能部署在本地是XX.cn,於是上面的瀏覽器調試就不好使了。
這里就要說到Xdebug helper的作用了,在它被啟用的時候,實質上是在你請求的時候生成了一個名為XDEBUG_SESSION=phpstorm(你所設置的IDEkey)的cookie,當服務器檢測到有這個cookie 的時候,就進入斷點調試的流程,至於接口為什么沒用,是因為它生成的cookie是對於127.0.0.1的這個網站的,識別cookie進行斷點調試的過程是xx.cn需要干的事即你接口請求的域名。至於設置什么從cookie的值是什么,本地親測只要有名為XDEBUG_SESSION這個cookie不管值為什么都進入斷點調試,所以擴展程序設不設置都無所謂。
得出這個結論,我們就可以使用postman進行斷點調試了,需要注意的是除了這個cookie,可能還有其它的請求頭,什么authKey,sessionId等都不要遺漏,不然直接被框架的攔截器給攔截了。
於是繼續科普了一下調試的原理,當開啟Xdebug擴展以后,發送的請求帶有XDEBUG_SESSION 的cookies時,服務器立馬進入到斷點調試狀態,而本地phpstorm也會開啟一個xdebug服務器,端口即為設置的9000端口,php服務器每執行一段代碼,都會與phpstorm設置的xdebug服務器進行通信,直到進入斷點,才會把內存中所有的執行結果返回給phpstorm的xdebug服務器,接着我們在調試時就看見了變量的值,點擊調試的下一步按鈕,phpstorm的xdebug服務器會發送執行下一行代碼的請求,請求中包含的參數和操作的按鈕有關,有的按鈕是進入下一行,有的按鈕是進入一個方法,還有的是直接執行完。具體的參數值,在這里就不深究了。