亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用Chrome調試JavaScript的斷點設置和調試技巧

2019-11-20 13:42:21
字體:
來源:轉載
供稿:網友

你是怎么調試 JavaScript 程序的?最原始的方法是用 alert() 在頁面上打印內容,稍微改進一點的方法是用 console.log() 在 JavaScript 控制臺上輸出內容。嗯~,用這兩種土辦法確實解決了很多小型 JavaScript 腳本的調試問題。不過放著 Chrome 中功能越發強大的開發者工具不用實在太可惜了。本文主要介紹其中的 JavaScript斷點設置和調試功能,也就是其中的 Sources Panel(以前叫 Scripts)。如果你精通 Eclipse 中的各種 Java 調試技巧,那么這里的概念都是類似。寫作本文時使用的 Chrome 版本為 25.0.1364.172。

基本環境

SourcesPanel 的左邊是內容源,包括頁面中的各種資源。其中,又分 Sources 和 Content scripts。Sources 就是頁面本身包含的各種資源,它是按照頁面中出現的域來組織的,這是我們要關注的。異步加載的 js 文件,在加載后也會出現在這里的。Content scripts 是 Chrome 的一種擴展程序,它是按照擴展的ID來組織的,這類擴展實際也是嵌入在頁面中的資源,它們也可以讀寫DOM。編寫、調試這類擴展的開發者才要關心它們,如果你的瀏覽器沒安裝任何擴展,那么Content scripts 就看不到任何東西。

Sources Panel 的中間主區域用于展示左邊資源文件的內容。

Sources Panel 的右邊是調試功能區,最上面的一排按鈕分別是暫停/繼續、單步執行、單步跳入、單步跳出、禁用/啟用所有斷點。下面是各種具體的功能區。稍后介紹。

注意,左右兩邊的區域默認可能收縮在兩側沒有顯示出來,點擊兩側的伸縮按鈕展示出來。左邊區域展示出來時默認是自動收縮狀態,點擊旁邊的 pin 按鈕就不會縮回去了。

最下面還有一些功能按鈕很有用。

在源代碼上設置斷點

通過左邊的內容源,打開對應的 JavaScript 文件,鼠標點擊文件的行號就可以設置和刪除斷點。添加的每個斷點都會出現在右側調試區的 Breakpoints 列表中,點擊列表中斷點就會定位到內容區的斷點上。如果你有多個文件、多個斷點的話,利用Breakpoints 列表中的斷點快速定位非常方便。

對于每個已添加的斷點都有兩種狀態:激活和禁用。剛添加的斷點都是激活狀態,禁用狀態就是保留斷點但臨時取消該斷點功能。在Breakpoints 列表中每個斷點前面都有一個復選框,取消選中就將禁用該斷點。斷點位置的右鍵菜單中也可以禁用斷點。也可以在右側功能區上面按鈕臨時禁用所有已添加的斷點,再點一下恢復原狀態。

條件斷點:在斷點位置的右鍵菜單中選擇“Edit Breakpoint...”可以設置觸發斷點的條件,就是寫一個表達式,表達式為 true 時才觸發斷點。查看斷點的環境調用棧(Call Stack):在斷點停下來時,右側調試區的 Call Stack 會顯示當前斷點所處的方法調用棧,比如有一個函數 g() 其中又調用了函數 f() ,而我在 f() 中設置了一個斷點,那么我在 console 中執行函數 g() 的時候會觸發斷點,其調用棧顯示如下:

最上面是 f(),然后是 g()。調用棧中的每一層叫做一個 frame,點擊每個 frame 可以跳到該 frame 的調用點上。

此外,還可以在 frame 上用右鍵菜單重新開始執行當前 frame,也就是從該 frame 的開始處執行。比如在函數 f() 的 frame 上 Restart Frame, 斷點就會跳到 f() 的開頭重新執行,context 中的變量值也會還原。這樣結合變量修改和編輯代碼等功能,就可以在當前 frame 中反復進行調試,而不用刷新頁面重新觸發斷點了。查看變量

Call Stack 列表的下方是 Scope Variables 列表,在這里可以查看此時局部變量和全局變量的值。執行選擇的代碼

在斷點調試時,可以用鼠標選擇想要查看的變量或表達式,然后右鍵菜單執行“Evaluate in Console”,就可以看到該表達式的當前的值了。中斷下次要執行的 JavaScript 語句右側調試區的上面的“中斷/繼續”按鈕還有一個功能,在沒有觸發斷點時,點一下這個按鈕就會進入“準備”中斷的狀態,頁面下一次執行 JavaScript 語句時會自動中斷,比如觸發了一個點擊動作時會執行的代碼。臨時修改 JavaScript 代碼通常我們在調試代碼時習慣:修改代碼→刷新頁面→重新檢查,這么一個循環。但其實 Chrome 中可以臨時修改 JS 文件中的內容,保存(Ctrl+S)就可以立即生效,結合 Console 等功能就可以立即重新調試了。但注意這個修改是臨時的,刷新頁面修改就沒了。

異常時斷點

在界面下方能看到按鈕,它是設置程序運行時遇到異常時是否中斷的開關。點擊該按鈕會在3種狀態間切換:

默認遇到異常不中斷

遇到所有異常都會中斷,包括已捕獲的情況

僅在出現未捕獲的異常時才中斷

主要解釋一下狀態2和狀態3的區別

try{
throw 'a exception';
}catch(e){
console.log(e);
}

上面 try 里面的代碼會遇到異常,但是后面的 catch 代碼能夠捕獲該異常。如果是所有異常都中斷,那么代碼執行到會產生異常的 throw 語句時就會自動中斷;而如果是僅遇到未捕獲異常才中斷,那么這里就不會中斷。一般我們會更關心遇到未捕獲異常的情況。

在 DOM 元素上設置斷點

有時候我們需要監聽某個 DOM 被修改情況,而不關心是哪行代碼做的修改(也可能有多處都會對其做修改)。那么我們可以直接在 DOM 上設置斷點。

如圖所見,在元素審查的 Elements Panel 中在某個元素上右鍵菜單里可以設置三種不同情況的斷點:子節點修改自身屬性修改自身節點被刪除選中之后,Sources Panel 中右側的 DOM Breakpoints 列表中就會出現該 DOM 斷點。一旦執行到要對該 DOM 做相應修改時,代碼就會在那里停下來,如下圖所示。

XHR 斷點

右側調試區有一個 XHR Breakpoints,點擊+ 并輸入 URL 包含的字符串即可監聽該 URL 的 Ajax 請求,輸入內容就相當于 URL 的過濾器。如果什么都不填,那么就監聽所有 XHR 請求。一旦 XHR 調用觸發時就會在 request.send() 的地方中斷。

按事件類型觸發斷點

右側調試區的Event Listener 列表,這里列出了各種可能的事件類型。勾選對應的事件類型,當觸發了該類型的事件的 JavaScript 代碼時就會自動中斷。

調試快捷鍵

所有開發工具中的快捷鍵都可以在界面右下角的設置中查到。斷點調試時一般用的是 F8、F10、F11或 Shitf+F11,但在 Mac OS 上 F10 等功能鍵可能與系統默認的快捷鍵沖突。沒關系,它們分別可以用 Cmd+/ 、Cmd+'、Cmd+; 、Shift+Cmd+; 代替。//@ sourceURL 給 eval 出來的代碼命名有時候一些非常動態的代碼是以字符串的形式通過 eval() 函數在當前 Javascript context 中創建出來,而不是作為一個獨立的 js 文件加載的。這樣你在左邊的內容區就找不到這個文件,因此很難調試。其實我們只要在 eval 創建的代碼末尾添加一行 “//@ sourceURL=name“就可以給這段代碼命名(瀏覽器會特殊對待這種特殊形式的注釋),這樣它就會出現在左側的內容區了,就好像你加載了一個指定名字的 js 文件一樣,可以設置斷點和調試了。下圖中,我們通過 eval 執行了一段代碼,并利用sourceURL 將它命名為dynamicScript.js ,執行后左側內容區就出現了這個“文件”,而它的內容就是 eval 的中的內容。還可以看看這個給動態編譯出來的CoffeeScript 代碼命名的示例

var coffee = CoffeeScript.compile(code.value)+ "http://@ sourceURL=" + (evalName.value || "Coffeeeeeeee!");
eval(coffee);

實際上,//@ sourceURL 不僅僅可以用在 eval 的代碼中,任何 js 文件、甚至是 Javascript Console 輸入的代碼都可以用,效果一樣!格式化代碼(Pretty Print)按鈕用于把雜亂的代碼重新格式化為漂亮的代碼,比如一些已被壓縮的 js 文件基本沒法看、更沒法調試。點一下格式化,再點一下就取消格式化。美化前
美化后參考資料:Chrome Developer Tools 官方文檔

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97久久精品人搡人人玩| 久久精品国产69国产精品亚洲| 久久中文字幕视频| 国产精品视频导航| 亚洲全黄一级网站| 亚洲天堂久久av| 91产国在线观看动作片喷水| 久久久久久国产精品三级玉女聊斋| 欧美性色视频在线| 国产亚洲成av人片在线观看桃| 欧美一级免费视频| 国产精品偷伦一区二区| 国产亚洲精品久久久久久| 欧美视频一二三| 中文字幕一区日韩电影| 国产视频久久久久| 国产精品极品尤物在线观看| 91在线免费网站| 成人av电影天堂| 九色精品美女在线| 亚洲人免费视频| 午夜精品99久久免费| 黑人精品xxx一区| 精品一区二区三区四区| 久久久久久久影院| 色婷婷久久一区二区| 一区二区福利视频| 91久久在线观看| 国产精品色悠悠| 色99之美女主播在线视频| 欧美日韩视频免费播放| 黑人巨大精品欧美一区二区免费| 欧美国产精品人人做人人爱| 97色在线观看免费视频| 亚洲精品色婷婷福利天堂| 亚洲精品福利资源站| 欧美日韩另类在线| 欧美成人国产va精品日本一级| 精品久久久久久久久久久久| 亚洲精品一区二区三区不| 亚洲精品国产电影| 亚洲午夜精品久久久久久性色| 日韩高清有码在线| 国产精品久久久久久久久免费看| 久热99视频在线观看| 成人黄色免费在线观看| 免费不卡在线观看av| 久久国内精品一国内精品| 神马久久久久久| 久久久久久久久久久国产| 亚洲人av在线影院| 国产精品久久久久久久久久新婚| 国产视频观看一区| 亚洲免费电影在线观看| www.欧美视频| 欧美黄色三级网站| 久久中文字幕在线| 久久精品成人一区二区三区| 亚洲精品国产精品久久清纯直播| 亚洲精品久久久久久下一站| 久久国产精品网站| 久久久久亚洲精品成人网小说| 久久av资源网站| 日韩在线中文字| 国产一区二区三区久久精品| 日韩女优人人人人射在线视频| 91po在线观看91精品国产性色| 精品国产999| 国产成人精品久久二区二区91| 欧美专区在线视频| 亚洲欧美日韩在线高清直播| 久久久久久美女| 国产精国产精品| 欧美激情一区二区三区高清视频| 亚洲性av在线| 久久久极品av| 尤物yw午夜国产精品视频明星| 久久免费少妇高潮久久精品99| 欧美成人在线免费视频| 欧美成人午夜激情视频| 欧美精品999| 欧美诱惑福利视频| 在线午夜精品自拍| 在线播放日韩专区| 久久久av一区| 亚洲成人av中文字幕| 国内精品久久久久影院优| 国产午夜精品理论片a级探花| 91美女福利视频高清| 国产精品第一视频| 亚洲精品wwwww| 欧美日韩xxx| 欧美做受高潮电影o| 亚洲成年人影院在线| 欧美洲成人男女午夜视频| 在线观看欧美www| 国产成人精品久久二区二区91| 国产精品免费小视频| 欧美精品日韩三级| 欧美乱大交xxxxx| 日韩精品视频观看| 奇米四色中文综合久久| 欧美国产中文字幕| 欧美性开放视频| 91精品视频在线看| 亚洲二区中文字幕| 国产精品1区2区在线观看| 国产精品一区二区女厕厕| 久久在线精品视频| 国产精品夫妻激情| 久精品免费视频| 亚洲最大的成人网| 国产亚洲美女精品久久久| 国产视频久久久久| 国产亚洲精品综合一区91| 亚洲日韩欧美视频| 亚洲欧美日韩中文视频| 成人xxxxx| 欧美一级大片在线观看| 亚洲欧洲激情在线| 久久精品一区中文字幕| 97免费在线视频| 欧美国产日韩一区二区三区| 91系列在线观看| 91午夜在线播放| 亚洲片在线观看| 日韩欧美综合在线视频| 欧美性感美女h网站在线观看免费| 亚洲国产精品久久久| 欧美性猛交xxxx乱大交蜜桃| 欧美激情精品久久久久久变态| 亚洲丝袜一区在线| 国产精品99久久99久久久二8| 岛国视频午夜一区免费在线观看| 亚洲精品乱码久久久久久按摩观| 社区色欧美激情 | 久久成人人人人精品欧| 国产极品精品在线观看| 亚洲国产精品嫩草影院久久| 中文字幕精品在线视频| 久久亚洲国产精品| 国产+成+人+亚洲欧洲| 国产99久久精品一区二区 夜夜躁日日躁| 88国产精品欧美一区二区三区| 在线色欧美三级视频| 国产精品亚洲一区二区三区| 欧美制服第一页| 亚洲欧美日韩天堂| 欧美网站在线观看| 亚洲欧美制服第一页| 亚洲第一偷拍网| 日韩综合视频在线观看| 亚洲福利在线观看| 国产精品成人av性教育| 尤物yw午夜国产精品视频| 高清一区二区三区四区五区| 久久久国产影院| 国产一区二区三区网站| 国产一区二区三区毛片| 欧美中文在线免费| 亚洲国产精品久久精品怡红院| 欧美成人第一页| 国产亚洲一区二区精品| 亚洲天堂成人在线|