一、一段說明
由於筆者項目后端是用PHP開發,調試用的是xdebug擴展,IDE用的是PhpStorm,當要進行項目調試的時候,實際上是通過建立的Php Remote Debug。如圖所示:
配置的Ide Key為XDEBUG。
這樣,在php項目中,可以將調試模式一直打開,只要請求的URL中包含cookie且鍵值為:XDEBUG_SESSION=XDEBUG(這里的值XDEBUG就是上面配置的Ide Key的內容),就能自動在斷點處斷下來。
之前實現的方式為用Chrome的Xdebug Helper插件,配置IDE key,如下圖:
並在本地需要調試的頁面上啟用插件
這樣來觸發IDE中的調試斷點。
但。。我們有Fiddler,知道了上面斷點觸發的機制其實是訪問的URL多加了一個cookie值后,其實就好辦了,完全可以通過Fiddler來實現。
二、正文
其實想想,我們要實現這個功能的話,只需要讓Fiddler對發出去的請求自動增加一條cookie值就可以了。
剛好,FiddlerScript里面的OnBeforeRequest函數可以滿足我們的要求。
首先,打開Fiddler,找到FiddlerScript的文件,並定向到OnBeforeRequest位置
在里面增加如下內容:
var sCookie = oSession.oRequest['cookie']; if(sCookie.IndexOf('XDEBUG_SESSION') == -1){ sCookie += ';XDEBUG_SESSION=XDEBUG'; oSession.oRequest['cookie'] = sCookie; }
但是這樣的話,我們的所有請求都會帶上這個cookie了,這顯然是不合理的。那么我們需要一個開關來控制什么時候帶上這條cookie。
這樣的話,就在Rules菜單里面增加一個XDEBUG的開關,用於控制請求是否帶此cookie。
在FiddlerScript類里面增加一個控制菜單的靜態變量,如下圖:
然后將OnBeforeRequest里面的代碼改成如下的樣子:
if (m_Xdebug){ var sCookie = oSession.oRequest['cookie']; if(sCookie.IndexOf('XDEBUG_SESSION') == -1){ sCookie += ';XDEBUG_SESSION=XDEBUG'; oSession.oRequest['cookie'] = sCookie; } }
最后,為了方便辨認,讓Fiddler將帶有XDEBUG_SESSION cookie的URL標記出來,在上面的后面增加如下一條內容:
if (oSession.oRequest["cookie"].IndexOf("XDEBUG_SESSION") != -1){ oSession["ui-color"] = "#D17C2E"; oSession["ui-backcolor"] = "#f2f2f2"; }
然后點擊FiddlerScript左上角的Save Script就OK了。
現在去Rules菜單中,把我們剛剛配置的XDEBUG菜單勾上,就能發現請求的URL中帶有上面配置的cookie了,而且左邊Session列表的顏色也變成了剛剛配置的顏色。
三、最后
但其實這樣也不是特別方便。所以后來筆者實現了按X鍵,則將選擇的Session自動增加cookie並發送,這樣就更加方便了。只不過那份script文件在公司電腦上,時隔已久,已經忘了當時怎么寫的了,等想起來或者回公司后再來補坑。
另:我們剛剛自定義的FiddlerScript文件其實保存在C:\%Users%\Documents\Fiddler2\Scripts中文件名為CustomRules.js。