超完整的 Chrome 瀏覽器客戶端調試大全

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

引言

“工欲善其事,必先利其器”

沒錯,這句話個人覺得說的特別有道理,舉個例子來說吧,厲害的化妝師都有一套非常專業的刷子,散粉刷負責定妝,眼影刷負責打眼影,各司其職,有了專業的工具才能干專業的事,這個靈感要來源于之前我想買化妝品時,店里的海報標語,由此聯想到,如果你想在某個事情上做好,并且做的專業,那么你一定要把你的工具用好,這樣才能事半功倍,我見過很多師兄師姐,寫了很多代碼,能夠很快的完成工作,能夠處理很多復雜的業務邏輯,但是對于瀏覽器的調試掌握的并不全面和深入,說說本姑娘吧,我的編程調試起源于自學滴前端課程,因為學習的時候看的都是基礎的教學視頻,對于調試也只是掌握了alert和console, 請大家別笑話,認真看完再說話,試問誰當初入門時候不是走的這條路呢,當你不再限于做靜態頁面,古老而經典的調試方式肯定不能幫你完成日常調試,日后我進入到了大公司去實習,才真正開始接觸專業開發業務,開始跟著師兄和師傅一起上路,那時我才有了“js斷點調試“的意識,開始一步步調試我的js代碼~

下面總結一下一些常用調試方法,這些方法能讓開發的工作順利并且高效,這里小女子拿出來總結一下,與各位程序猿同仁分享一下 ~ (此處應有掌聲…… ^_^)

一. 先來認識一下這些按鈕

52af2165-aa3b-41ea-acdf-4c3fb7ba3b27

先來看這張圖最上頭的一行是一個功能菜單,每一個菜單都有它相應的功能和使用方法,依次從左往右來看

1.箭頭按鈕:用于在頁面選擇一個元素來審查和查看它的相關信息,當我們在Elements這個按鈕頁面下點擊某個Dom元素時,箭頭按鈕會變成選擇狀態

2.設備圖標:點擊它可以切換到不同的終端進行開發模式,移動端和pc端的一個切換,可以選擇不同的移動終端設備,同時可以選擇不同的尺寸比例,chrome瀏覽器的模擬移動設備和真實的設備相差不大,是非常好的選擇

51d40eb1-3e74-4e27-9583-b3b50f332510

可選擇的適配

3.Elements?功能標簽頁:用來查看,修改頁面上的元素,包括DOM標簽,以及css樣式的查看,修改,還有相關盒模型的圖形信息,下圖我們可以看到當我鼠標選擇id 為lg_tar的div元素時,右側的css樣式對應的會展示出此id 的樣式信息,此時可以在右側進行一個修改,修改即可在頁面上生效, 灰色的element.style樣式同樣可以進行添加和書寫,唯一的區別是,在這里添加的樣式是添加到了該元素內部,實現方式即:該div元素的style屬性,這個頁面的功能很強大,在我們做了相關的頁面后,修改樣式是一塊很重要的工作,細微的差距都需要調整,但是不可能說做到每修改一點即編譯一遍代碼,再刷新瀏覽器查看效果,這樣很低效,一次性在瀏覽器中修改之后,再到代碼中進行修改

b548b239-eb00-447d-be60-29c1c3b3ce9b

  • 對應的樣式

54802412-70df-4c69-8adb-cea9c52b2b09

  • 盒模型信息

同時,當我們瀏覽網站看到某些特別炫酷的效果和難做的樣式時候,打開這個功能,我們即可看到別人是如何實現的,學會它這知識就是你的了,仔細鉆研也會有意想不到的收獲

4.Console控制臺:用于打印和輸出相關的命令信息,其實console控制臺除了我們熟知的報錯,打印console.log信息外,還有很多相關的功能,下面簡單介紹幾個:

a: 一些對頁面數據的指令操作,比如打斷點正好執行到獲取的數據上,由于數據都是層層嵌套的對象,這個時候查看里面的key/value不是很方便,即可用這個指令開查看,obj的json string 格式的key/value,我們對于數據里面有哪些字段和屬性即可一目了然

ac4fc806-f29a-44e2-bcf0-95b28c401790

其他功能

b: 除了console.log還有其他相關的指令可用

6e7f7867-9422-4238-a23b-d463e1f799d5

console也有相關的API

5.Sources?js資源頁面:這個頁面內我們可以找到當然瀏覽器頁面中的js 源文件,方便我們查看和調試,在我還沒有走出校園時候,我經常看一些大站的js代碼,那時候其實基本都看不懂,但是最起碼可以看看人家的代碼風格,人家的命名方式,所有的代碼都是壓縮之后的代碼,我們可以點擊下面的{}大括號按鈕將代碼轉成可讀格式

Sources Panel 的左側分別是 Sources 和 Content scripts和Snippets

a147d491-68bd-45d7-8403-6c25ce99201e

  • 對應的源代碼

a8e61566-e44e-4a92-95e0-c872cf9a2cbb

  • 格式化后的代碼

關于打斷點調試的內容,下面介紹,先來說一些,其他平時基本沒人用但是很有用的小點,比如當我們想不起某個方法的具體使用時候,會打開控制臺隨意寫一些測試代碼,或者想測試一下剛剛寫的方法是否會出現期待的樣子,但是控制臺一打回車本想換行但是卻執行剛寫的半截代碼,所以推薦使用Sources下面的左側的Sinppets代碼片段按鈕,這時候點擊創建一個新的片段文件,寫完測試代碼后把鼠標放在新建文件上run,再結合控制臺查看相關信息(新建了一個名叫:app.js的片段代碼,在你的項目環境頁面內,該片段可執行項目內的方法

f56570d0-2ec4-4970-8ba5-c1bf2b8abf2d

  • 自己書寫的片段

Content scripts 是 Chrome 的一種擴展程序,它是按照擴展的ID來組織的,這些文件也是嵌入在頁面中的資源,這類文件可以讀寫和操作我們的資源,需要調試這些擴展文件,則可以在這個目錄下打開相關文件調試,但是幾乎我們的項目還沒有相關的擴展文件,所以啥也看不到,平時也不需要關心這塊

e93f193c-3bf2-41ef-b300-e199a8a60d27

無結果

6.Network?網絡請求標簽頁:可以看到所有的資源請求,包括網絡請求,圖片資源,html,css,js文件等請求,可以根據需求篩選請求項,一般多用于網絡請求的查看和分析,分析后端接口是否正確傳輸,獲取的數據是否準確,請求頭,請求參數的查看

83a9003a-434c-4f11-a7d6-6ce2f5965106

  • 所有的資源

以上我選擇了All,就會把該頁面所有資源文件請求下來,如果只選擇XHR 異步請求資源,則我們可以分析相關的請求信息

a36f5b9e-2e06-4593-9c77-a50d798bc8ea

  • 請求的相關信息

打開一個Ajax異步請求,可以看到它的請求頭信息,是一個POST請求,參數有哪些,還可以預覽它的返回的結果數據,這些數據的使用和查看有利于我們很好的和后端工程師們聯調數據,也方便我們前端更直觀的分析數據

90ebfadd-e79a-4837-9873-5cbb0cd1b0f2

  • 預覽請求的數據

7.Timeline標簽頁可以顯示JS執行時間、頁面元素渲染時間,不做過多介紹

8.Profiles標簽頁可以查看CPU執行時間與內存占用,不做過多介紹

9.Resources標簽頁會列出所有的資源,以及HTML5的Database和LocalStore等,你可以對存儲的內容編輯和刪除 不做過多介紹

10.Security標簽頁 可以告訴你這個網站的安全性,查看有效的證書等

11.Audits標簽頁 可以幫你分析頁面性能,有助于優化前端頁面,分析后得到的報告

2e0393c9-cc86-4a20-905e-3f80154f4f2f

  • 分析結果

二.Sources資源頁面的斷點調試

1.如何調試

調試js代碼,肯定是我們常用的功能,那么如何打斷點,找到要調試的文件,然后在內容源代碼左側的代碼標記行處點擊即可打上一個斷點

0d2066b5-e10e-4562-b5f7-eef9ff2e9a02

2.斷點與 js代碼修改

看下面這張圖,我在一個名為toggleTab的方法下打了兩個斷點,當開始執行我們的點擊切換tab行為后,代碼會在執行的斷點出停下來,并把相關的數據展示一部分,此時可以在已經執行過得代碼處,把鼠標放上去,即可查看相關的具體數據信息,同時我們可以使用右側的功能鍵進行調試,右側最上面一排分別是:暫停/繼續、單步執行(F10快捷鍵)、單步跳入此執行塊(F11快捷鍵)、單步跳出此執行塊、禁用/啟用所有斷點。下面是各種具體的功能區

980c6de1-f378-48c3-90a5-6d865b46881f

  • 在代碼中打斷點

在當前的代碼執行區域,在調試中如果發現需要修改的地方,也是可以立即修改的,修改后保存即可生效,這樣就免去了再到代碼中去書寫,再刷新回看了

cce6a3d6-e055-43ea-9687-e3f1fa6854cf

臨時修改

3.快速進入調試的方法

當我們的代碼執行到某個程序塊方法處,這個方法上可能你并沒有設置相關的斷點,此時你可以F11進入此程序塊,但是往往我們的項目都是經過很多源代碼封裝好的方法,有時候進入后,會走很多底層的封裝方法,需要很多步驟才能真正進入這個函數塊,此時將鼠標放在此函數上,會出現相關提示,會告訴你在該文件的哪一行代碼處,點擊即可直接看到這個函數,然后臨時打上斷點,按F10或者點擊右上角的第二個按鈕即可直接進入此函數的斷點處

5130e68e-74c7-4b1a-9a12-7f5e7f5ceb6d

4.調試的功能區域

每一個功能區,都有它相關的左右,先來看一張圖,它都有哪些功能

bdb50caf-0484-47b9-a3ed-ec0aa9d38e67

Call Stack調用棧:當斷點執行到某一程序塊處停下來后,右側調試區的 Call Stack 會顯示當前斷點所處的方法調用棧,從上到下由最新調用處依次往下排列,Call Stack 列表的下方是Scope Variables列表可以查看此時局部變量和全局變量的值。圖中可以看出,我們最先走了toggleTab這個方法,然后走到了一個更新對象的方法上,當前調用在哪里,箭頭會幫你指向哪里,同時我們可以點擊,調用棧列表上的任意一處,即可回頭再去看看代碼

8dd4193f-f723-4597-9633-1c789fbf474b

但是若你想從新從某個調用方法出執行,可以右鍵Restart Frame, 斷點就會跳到此處開頭重新執行,Scope?中的變量值也會依據代碼從新更改,這樣就可以回退來從新調試,錯過的調試也可以回過頭來反復查看

c7ba0acc-7305-4a55-9790-6bc637922989

Breakpoints關于斷點:所有當前js的斷點都會展示在這個區域,你可以點擊按鈕用來“去掉/加上”此處斷點,也可以點擊下方的代碼表達式,調到相應的程序代碼處,來查看

1cd4281f-4170-40e4-8bfa-cc0050af9a53

XHR Breakpoints

在XHR Breakpoints處,點擊右側的+號,可以添加請求的URL,一旦 XHR 調用觸發時就會在 request.send() 的地方中斷

238a0267-dbd8-4dd3-8598-b09895b5694e

DOM Breakpoints:

可以給你的DOM元素設置斷點,有時候真的需要監聽和查看某個元素的變化情況,賦值情況,但是我們并是不太關心哪一段代碼對它做的修改,只想看看它的變化情況,那么可以給它來個監聽事件,這個時候DOM Breakpoints中會如圖

da1c5b48-42db-4d5f-8a24-19389fa858f0

當要給DOM添加斷點的時候,會出現選擇項分別是如下三種修改1.子節點修改2.自身屬性修改3.自身節點被刪除。選中之后,Sources Panel 中右側的 DOM Breakpoints 列表中就會出現該 DOM 斷點。一旦執行到要對該 DOM 做相應修改時,代碼就會在那里停下來

Event listener Breakpoints?

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

三.Post man你值得擁有的網絡請求神器

在我們的開發過程中,后端的接口都是由發起AJAX請求而獲取到的相關數據,但是很多情況是我們的業務還沒有做到那塊時,后端的同學接口都已經準備好了,但是為了便于后期的工作,將接口請求的數據模擬訪問,然后對接口聯調很重要,也很方便,因為我們不可能把每個請求代碼都寫到文件里編譯好了再去瀏覽器內查看,這時候可以安裝一個post man網絡請求插件,在谷歌應用商店下載,需要翻墻

eea9dc12-f18e-4ccc-9998-b34f4f367ce1

該擴展程序使用非常簡單,功能同時也非常強大,輸入你的請求,選擇好請求的method,需要請求參數的挨個填好,send之后,就可以看到返回的數據,這個小工具很利于我們的開發

48b702eb-7a24-4fa9-aa52-bcc8b97c8fbd

完結

寫到這里這篇總結就結束了,也許有很多寫的不到位的地方,也有一些專業用詞不嚴謹的地方,希望看到的讀者可以和我一起交流,我也非常樂意我的總結可以給 剛剛學會編程需要調試的同學受用,再此之前我一直在尋找一篇從頭到尾的調試教學文章,我一直沒有找到,要么是一點點的片段講解,要么是專講js斷點調試,所以索性后來就直接看了 Chrome Developer Tools 的英文官方文檔,并結合自己的一些小使用心得總結出此文,希望受到指點和修正 也希望可以幫助一些同學~

轉載于:https://my.oschina.net/liuh1988/blog/801848

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP 獲取服務器詳細信息【轉】

碰到此問題,做下記錄 獲取系統類型及版本號: php_uname() (例:Windows NT COMPUTER 5.1 build 2600)只獲取系統類型: php_uname(s) (或&#xff1…

HIVE攻略 JFK_Hive安裝及使用攻略

目錄Hive的安裝Hive的基本使用:CRUDHive交互式模式數據導入數據導出Hive查詢HiveQLHive視圖Hive分區表1. Hive的安裝系統環境裝好hadoop的環境后,我們可以把Hive裝在namenode機器上(c1)。hadoop的環境,請參考:讓Hadoop跑在云端系列文章&#…

MySQL 為什么用索引,為什么是 B+樹,怎么用索引

MySQL 索引 A database index is a data structure that improves the speed of operations in a table. Indexes can be created using one or more columns, providing the basis for both rapid random lookups and efficient ordering of access to records. 為什么需要索…

頁面加載完畢執行多個JS函數

通常我們需要在打開頁面時加載腳本,這些腳本必須在頁面加載完畢后才可以執行,因為這時候DOM才完整,可以利用window.onload確保這一點,如:window.οnlοadfirstFunction;這腳本的意思是在頁面完畢后執行firstFunction函…

Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加載--->實例化--->服務--->銷毀。init():在Servlet的生命周期中,僅執行一次init()方法。它是在服務器裝入Servlet時執行的,負責初始化Servlet對象。可以配置服務器&…

【Go 并發控制】上下文 context 源碼

Context 在 Go 服務中,往往由一個獨立的 goroutine 去處理一次請求,但在這個 goroutine 中,可能會開啟別的 goroutine 去執行一些具體的事務,如數據庫,RPC 等,同時,這一組 goroutine 可能還需要…

js設置全局變量ajax中賦值

js設置全局變量,在ajax中給予賦值賦值不上問題解決方案 方案一、 //在全局或某個需要的函數內設置Ajax異步為false,也就是同步. $.ajaxSetup({async : false}); //然后再進行你的Ajax操作 $.post(地址, 參數, function(data, status) { if (status &q…

iOS開發UI篇—模仿ipad版QQ空間登錄界面

一、實現和步驟 1.一般ipad項目在命名的時候可以加一個HD,標明為高清版 2.設置項目的文件結構,分為home和login兩個部分 3.登陸界面的設置 (1)設置第一個控制器和自定義的控制器類(登陸)關聯 (2&#xff09…

click傳值vue_對vue下點擊事件傳參和不傳參的區別詳解

如下所示:{{btn_text1}}{{btn_text2}}var _vm new Vue({data : {btn_text1 : 點擊1 ,btn_text2 : 點擊2},methods : {test_click1 : function (e) {console.log(test_click1--------------------------) ;console.log(e) ;// 輸出結果:MouseEvent {isTr…

【Golang 源碼】sync.Map 源碼詳解

sync.Map 不安全的 map go 中原生的 map 不是并發安全的&#xff0c;多個 goroutine 并發地去操作一個 map 會拋出一個 panic package main import "fmt" func main() {m : map[string]int {"1": 1, "2": 2,}// 并發寫for i : 0; i < 100;…

oracle中scn(系統改變號)

系統scn&#xff1a; select checkpoint_change# from v$database; 文件scn&#xff1a; select name,checkpoint_change# from v$datafile; 結束scn&#xff1a; select name,last_change# from v$datafile; 數據文件頭部scn…

sicktim571操作手冊_SICK激光傳感器TIM310操作說明書

SICK激光傳感器TIM310操作說明書最近更新時間&#xff1a;2015/1/23 13:31:29提 供 商&#xff1a;資料大小&#xff1a;1.2MB文件類型&#xff1a;PDF 文件下載次數&#xff1a;709次資料類型&#xff1a;瀏覽次數&#xff1a;5192次相關產品&#xff1a;詳細介紹&#xff1a;…

Tengine 安裝配置全過程

在先前的文章中介紹過Tengine&#xff0c;先前只是使用了運維人員配置好的內容&#xff0c;未自己進行過安裝配置。周末閑來無事&#xff0c;對于Tengine進行了嘗試性的安裝。記錄下面方便以后再做改進。Tengine官網上有個非常簡單的教程&#xff0c;中間并未涉及到一些常用的設…

【Go】sync.WaitGroup 源碼分析

WaitGroup sync.WaitGroup 用于等待一組 goroutine 返回&#xff0c;如&#xff1a; var wg sync.WaitGroup{}func do() {time.Sleep(time.Second)fmt.Println("done")wg.Done() }func main() {go do()go do()wg.Add(2)wg.Wait()fmt.Println("main done"…

什么是響應式設計?為什么要做響應式設計?響應式設計的基本原理是什么?...

頁面的設計和開發應當根據用戶行為以及設備環境&#xff08;系統平臺、屏幕尺寸、屏幕定向等&#xff09;進行相應的響應和調整。具體的實踐方式由多方面組成&#xff0c;包括彈性網格和布局、圖片、css media query的使用等。無論用戶正在使用筆記本還是iPad&#xff0c;我們的…

三個數相減的平方公式_快收好這份小學數學公式大全!孩子遇到數學難題時肯定用得上...

必背定義、定理公式1.三角形的面積&#xff1d;底高2 公式 S&#xff1d; ah22.正方形的面積&#xff1d;邊長邊長公式 S&#xff1d; aa3.長方形的面積&#xff1d;長寬公式 S&#xff1d; ab4.平行四邊形的面積&#xff1d;底高公式 S&#xff1d; ah5.梯形的面積&#xff1d…

Eclipse 控制console

http://blog.csdn.net/leidengyan/article/details/5686691

【Go】sync.RWMutex源碼分析

RWMutex 讀寫鎖相較于互斥鎖有更低的粒度&#xff0c;它允許并發讀&#xff0c;因此在讀操作明顯多于寫操作的場景下能減少鎖競爭的次數&#xff0c;提高程序效率。 type RWMutex struct {w Mutex // held if there are pending writerswriterSem uint32 // sem…

add.attribute向前端傳_前端知識-概念篇

1、一次完整的HTTP事務是怎樣的一個過程&#xff1f;基本流程&#xff1a;a. 域名解析b. 發起TCP的3次握手c. 建立TCP連接后發起http請求d. 服務器端響應http請求&#xff0c;瀏覽器得到html代碼e. 瀏覽器解析html代碼&#xff0c;并請求html代碼中的資源f. 瀏覽器對頁面進行渲…

【數據庫】一篇文章搞懂數據庫隔離級別那些事(LBCC,MVCC)

MySQL 事務 文章比較長&#xff0c;建議分段閱讀 后續如果有改動會在 Junebao.top 之前對事務的了解僅限于知道要么全部執行&#xff0c;要么全部不執行&#xff0c;能背出 ACID 和隔離級別&#xff0c;知其然但不知其所以然&#xff0c;現在覺得非常有必要系統學一下&#xff…