一次扒某網站的前端代碼,打開控制檯要看Network,結果發現他們頁面一打開控制檯就不斷的debugger
,100ms
一次,很影響看頁面內容。就像下面這樣的前端
每次在斷點處停下來的時候頁面都會跳到source
這個tab頁面,也可以看到他的debugger
的代碼,其實他的實現很簡單,只有這一行代碼segmentfault
(function() {var a = new Date(); debugger; return new Date() - a > 100;}())
雖然簡單,可是卻頗有效。瀏覽器
因此他帶來的影響仍是挺大的,咱們須要解決這個問題。函數
這個問題解決起來仍是蠻簡單的,問題解決只須要一句話:禁止斷點。
而對應的操做是在Chrome控制檯
的Source Tab頁
點擊Deactivate breakpoints
按鈕或者按下Ctrl + f8
(下圖)。網站
這樣就能禁用斷點了,問題就獲得瞭解決,可是當你須要調試的時候記得要起他哦。很簡單的操做,可是你若是對Chrome控制檯調試
不熟悉的話仍是比較頭疼的。在這裏記錄一下,分享給更多的人。spa
後來發現這種作法有時候有些不妥,就好比有咱們看別人網站代碼有時候就是爲了調試網站的代碼,那麼這時咱們這麼直接乾脆的禁止斷點後咱們也沒辦法調試網站的代碼了,那這就有點殺敵一千自損八百的意思。那有什麼辦法能夠知足咱們既能阻止網站一直debugger
還能讓咱們繼續調試網站的代碼呢?這就要看網站怎麼實現不斷debugger
了:
有的網站作的比較簡單,是用具名函數作的,相似這樣debug
setInterval(startDebug, 100); // 舉個例子而已,不少網站並非這麼實現的
調試
function startDebug() { debugger; };
code
這種狀況比較好解決,咱們隨便從新定義這個方法就好了,形如:對象
function startDebug() {};
可是也有的網站作的比較厲害點,用匿名函數來實現,形如:
setInterval(function () { debugger }, 100); // 舉個例子而已,不少網站並非這麼實現的
這種狀況就比較蛋疼了,目前我是沒啥解決方法,若是有人知道的話,不妨在下面留言了。
下面有位老兄(@XYShaoKang)提到用條件斷點
來應對這樣的實現
setInterval(function () { debugger }, 100); // 舉個例子而已,不少網站並非這麼實現的
我試了下,確實能夠,可是有侷限性。
先說能夠應對的狀況,一個動圖說明問題。
再來講說不能應對的狀況,仍是一個動圖說明問題。
也就是說,條件端點的適用狀況與具體代碼的書寫風格有關係。
另外,我發現Add conditional breakpoint
下面的Never pause here
也能在突破反調試的時候也能起到必定做用。侷限性與上Add conditional breakpoint
同樣。
一樣用兩個動圖說明問題。
能work的狀況
不能work的狀況