Chrome Devtools 高級調試指南(新)

2021-02-14 前端開發

前言

本文暫未涉及Performance面板的內容。
後續會單獨出一篇,以下是目錄:

常用命令和調試

黑盒腳本:Blackbox Script

控制臺內置指令

遠程調試WebView

1、Chrome Devtools 的用處

前端開發:開發預覽、遠程調試、性能調優、bug跟蹤、斷點調試等

後端開發:網絡抓包、開發調試Response

測試:服務端API數據是否正確、審查頁面元素樣式及布局、頁面加載性能分析、自動化測試

其他:安裝擴展插件,如AdBlock、Gliffy、Axure等

2、菜單面板拆解3、常用命令和調試1、呼出快捷指令面板:cmd + shift + p

在Devtools打開的情況下,鍵入cmd + shift + p將其激活,然後開始在欄中鍵入要查找的命令或輸入"?"號以查看所有可用命令。

…: 打開文件

:: 前往文件

@:前往標識符(函數,類名等)

!: 運行腳本文件

>;: 打開某菜單功能

1、性能監視器:> performance monitor
將顯示性能監視器以及相關信息,例如CPU,JS堆大小和DOM節點。2、FPS實時監控性能:> FPS選擇第一項3、截圖單個元素:> screen 選擇 Capture node screenhot

2、DOM 斷點調試

當你要調試特定元素的DOM中的更改時,可以使用此選項。這些是DOM更改斷點的類型:

如上圖:監聽form標籤,在input框獲得焦點時,觸發斷點調試

3、黑盒腳本:Blackbox Script

剔除多餘腳本斷點。

例如第三方(Javascript框架和庫,廣告等的堆棧跟蹤)。

為避免這種情況併集中精力處理核心代碼,在Sources或網絡選項卡中打開文件,右鍵單擊並選擇Blackbox Script


4. 事件監聽器:Event Listener Breakpoints

點擊Sources面板

展開Event Listener Breakpoints

選擇監聽事件類別,觸發事件啟用斷點


如上圖:監聽了鍵盤輸入事件,就會跳到斷點處。
5、本地覆蓋:Local overrides

使用我們自己的本地資源覆蓋網頁所使用的資源。

類似的,使用DevTools的工作區設置持久化,將本地的文件夾映射到網絡,在chrome開發者功能裡面對css 樣式的修改,都會直接改動本地文件,頁面重新加載,使用的資源也是本地資源,達到持久化的效果。


6、擴展:Local overrides 模擬 Mock 數據

來自:chrome 開發者工具 - local overrides

對於返回json 數據的接口,可以利用該功能,簡單模擬返回數據。

比如:

對象或者數組類型,從而覆蓋掉原接口請求。

4、控制臺內置指令

可以執行常見任務的功能,例如選擇DOM元素,觸發事件,監視事件,在DOM中添加和刪除元素等。

這像是Chrome自身實現的jquery加強版。

1、$(selector, [startNode]):單選擇器

document.querySelector的簡寫
語法:

$('a').href;
$('[test-id="logo-img"]').src;
$('#movie_player').click();


控制臺還會預先查詢對應的標籤,十分貼心。
還可以觸發事件,如暫停播放:

此函數還支持第二個參數startNode,該參數指定從中搜索元素的「元素」或Node。此參數的默認值為document

2、$$(選擇器,[startNode]):全選擇器

document.querySelectorAll的簡寫,返回一個數組標籤元素
語法:

$$('.button')


可以用過循環實現切換全選

或者列印屬性
此函數還支持第二個參數startNode,該參數指定從中搜索元素的「元素」或Node。此參數的默認值為document
用法:

var images = $$('img', document.querySelector('.devsite-header-background'));
   for (each in images) {
       console.log(images[each].src);
}


3、$x(path, [startNode]):xpath選擇器

$x(path)返回與給定xpath表達式匹配的DOM元素數組。

例如,以下代碼返回<p>頁面上的所有元素:

$x("//p")


以下代碼返回<p>包含<a>元素的所有元素:
1、變量列印:%s、%o、%d、和%c

const text = "文本1"
console.log(`列印${text}`)

除了標準的ES6語法,實際上還支持四種字符串輸出。
分別是:

console.log("列印 %s", text)

還有比較特殊的%c,可用於改寫輸出樣式。

console.log('%c 文本1', 'font-size:50px; background: ; text-shadow: 10px 10px 10px blue')


當然,你也可以結合其它一起用(注意佔位的順序)。

const text = "文本1"
console.log('%c %s', 'font-size:50px; background: ; text-shadow: 10px 10px 10px blue', text)

你還可以這麼玩:

console.log('%c Auth ', 
            'color: white; background-color: #2274A5', 
            'Login page rendered');
console.log('%c GraphQL ', 
            'color: white; background-color: #95B46A', 
            'Get user details');
console.log('%c Error ', 
            'color: white; background-color: #D33F49', 
            'Error getting user details');


2、列印對象的小技巧

當我們需要列印多個對象時,經常一個個輸出。且看不到對象名稱,不利於閱讀:

以前我的做法是這麼列印:

console.log('hello', hello);
console.log('world', world);

這顯然有點笨拙繁瑣。其實,輸出也支持對象解構:

console.log({hello, world});


3、布爾斷言列印:console.assert()

當你需要在特定條件判斷時列印日誌,這將非常有用。

語法

console.assert(assertion,obj)

用法

const value = 1001
console.assert(value===1000,"value is not 1000")


4、給console 編組:console.group()

當你需要將詳細信息分組或嵌套在一起以便能夠輕鬆閱讀日誌時,可以使用此功能。

console.group('用戶列表');
console.log('name: 張三');
console.log('job: 🐶前端');
// 內層
console.group('地址');
console.log('Street: 123 街');
console.log('City: 北京');
console.log('State: 在職');
console.groupEnd(); // 結束內層
console.groupEnd(); // 結束外層


5、測試執行效率:console.time()

沒有Performance API 精準,但勝在使用簡便。

let i = 0;
console.time("While loop");
while (i < 1000000) {
  i++;
}
console.timeEnd("While loop");
console.time("For loop");
for (i = 0; i < 1000000; i++) {
  // For Loop
}
console.timeEnd("For loop");



6、輸出表格:console.table()

這個適用於列印數組對象。。。

let languages = [
    { name: "JavaScript", fileExtension: ".js" },
    { name: "TypeScript", fileExtension: ".ts" },
    { name: "CoffeeScript", fileExtension: ".coffee" }
];
console.table(languages);


7、列印DOM 對象節點:console.dir()

列印出該對象的所有屬性和屬性值.
console.dir()和console.log()的作用區別並不明顯。若用於列印字符串,則輸出一摸一樣。

console.log("Why,hello!");
console.dir("Why,hello!");


在輸出對象時也僅是顯示不同(log識別為字符串輸出,dir直接列印對象。)。

唯一顯著區別在於列印dom對象上:

console.log(document)
console.dir(document)


一個列印出純標籤,另一個則是輸出DOM樹對象。6、遠程調試WebView

使用Chrome開發者工具在原生Android應用中調試WebView。

配置WebViews進行調試。

在 WebView類上調用靜態方法setWebContentsDebuggingEnabled。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);
}

手機打開usb調試,插上電腦。

在Chrome地址欄輸入:Chrome://inspect


正常的話在App中打開WebView時,chrome中會監聽到並顯示你的頁面。

點擊頁面下的inspect,就可以實時看到手機上WebView頁面的顯示狀態了。(第一次使用可能會白屏,這是因為需要去https://chrome-devtools-frontend.appspot.com那邊下載文件)

除了inspect標籤,還有 Focus tab:

其他應用裡的WebView也可以,例如這是某個應用裡的遊戲,用的也是網頁:

參考資料

Practical Chrome Devtools — Common commands & Debugging

Mobile web specialist — Remote Debugging

Console Utilities API Reference

Console API Reference

●編號1074,輸入編號直達本文

●輸入m獲取文章目錄

Web開發

相關焦點

  • Chrome Devtools 高級調試指南
    以下是目錄:常用命令和調試黑盒腳本:Blackbox Script控制臺內置指令遠程調試WebView1.Chrome Devtools 的用處前端開發:開發預覽、遠程調試、性能調優、bug跟蹤、斷點調試等後端開發:網絡抓包、開發調試Response測試:服務端API數據是否正確、審查頁面元素樣式及布局、頁面加載性能分析、自動化測試其他:安裝擴展插件,如AdBlock、Gliffy、Axure等2. 菜單面板拆解3. 常用命令和調試1.
  • DevTools(Chrome 85)的新功能
    issues #1082963[2] 和 #1055875[3])現在 Manifest 面板會在應用圖標尺寸不正確或者不是正方形時顯示應用快捷方式的警告 (issue #955497[4])計算窗格在跨多個視口時一致顯示 (issue #1073899[5])這些都是有用的更改,但是在本文中,我將回顧與樣式編輯和新的
  • Chrome 調試工具奇淫技 - OSCHINA - 中文開源技術交流社區
    所以對前端er來說,熟練掌握瀏覽器調試工具是性能優化的必備條件。首先我們得知道如何打開Chrome調試工具。你可以滑鼠右鍵,選擇審查元素(Inspect Element)或者使用快捷鍵(⌥⌘I)。Timeline跟前面的工具相比,Timeline就高級很多了。它可以讓你查看瀏覽器的渲染流程。解析代碼,布局,繪製,合併渲染層。了解更多,查看之前的文章瀏覽器渲染流程ProfilesProfiles工具主要是用來檢測CPU佔用程度,堆棧申請的內存。ResourcesResources工具顯示資源的,跟Sources不同的是,它會對文檔類型分類。
  • 尤雨溪開發的 vue-devtools 如何安裝,為何打開文件的功能鮮有人知?
    於是我寫篇文章,我是如何打包安裝 devtools 插件的。友情提醒:文章相對比較簡單。估計有人會說,這也要寫篇文章嘛。事實上,真的有挺多人不知道怎麼打包。寫文章也是提醒大家多看官方文檔和github README。插件我已經打包好,放到百度網盤中,在我的公眾號:若川視野,回復關鍵詞【插件】即可獲取到兩個版本的 devtools 進行安裝,兩個版本可以共存。
  • Chrome DevTools 全攻略!助力高效開發
    DNS lookup (DNS 查找) - 瀏覽器正在解析請求 IP 地址,頁面上的每個新域都需要完整的往返(roundtrip)才能進行 DNS 查找Proxy Negotiation - 瀏覽器正在與代理伺服器協商請求initial connection (初始連接) - 建立連接所需的時間,包括 TCP 握手/重試和協商 SSL。
  • Chrome DevTools 一些隱藏技巧
    如果你是一名 Web 開發人員,那麼你肯定會花不少時間在瀏覽器開發工具或 Web 控制臺中,審查元素、修改 CSS 或在控制臺中運行命令,這些是每個 Web 開發都知道如何使用的一些基本操作,但其實上我們還可以在瀏覽器內完成很多其他事情,讓你的調試、開發和網頁設計更加高效。
  • 使用Chrome DevTools有效調試Node.js
    本文介紹如何使用最新的Google Chrome DevTools高效地調試Node.js程序。請繼續閱讀,並閱讀關於Chrome DevTools的節點調試是識別和消除軟體應用程式中的錯誤的任務,它不僅僅是在代碼中列印出值。本文介紹如何使用最新的Google Chrome DevTools高效地調試Node.js程序。
  • Chrome DevTools中的這些騷操作,你都知道嗎?
    (給前端大全加星標,提升前端技能)作者:前端森林 公號 / 前端森林(本文來自作者投稿)引言 🏂作為開發人員,平時用的最多的就是Chrome devtoo我整理了一些我平時用的比較多的一些調試小技巧,相信對提高的你的工作效率能起到不小的幫助!
  • JavaScript 斷點調試技巧
    代碼的行號處可以通過點擊來添加新的斷點,再次點擊後取消。黃色區域用於控制代碼的執行,只需要掌握前四個按鈕的含義,就可以應付絕大多數場景。按鈕1是讓代碼繼續執行(resume),如果遇到下一個斷點就會再次中斷執行。按鈕2可以讓瀏覽器執行當前行(圖中是第3行),然後在下一行中斷代碼,按鈕3是進入當前函數,查看函數具體內容。
  • Eruda 2.0 發布:移動端調試工具
    Eruda 移動端調試工具在 1.5.4 版本發布後有長達半年多的時間暫停了更新,於今年下半年重新投入精力開發,主要針對之前被詬病較多的 console 性能進行了優化,同時也對工具的整體外觀做了一定調整
  • nodejs的調試debug
    一般來說我們需要藉助於強大IDE的調試功能來完成這項工作。nodejs也不例外。今天我們來詳細介紹一下如何調試nodejs程序。開啟nodejs的調試還記得之前我們講到的koa程序嗎?本文將會以一個簡單的koa服務端程序為例,來展開nodejs的調試。
  • Chrome這些調試技巧你都知道嗎
    Springboot啟動原理解析官方文檔:https://developers.google.com/web/tools/chrome-devtools/network/1.如何打開無論是在Windows還是Mac,都可以使用(FN)+F12鍵打開Chrome的Network面板。
  • .NET高級調試系列-Windbg調試入門篇
    Windbg是.NET高級調試領域中不可或缺的一個工具和利器,也是日常我們分析解決問題的必備。
  • 啟發之作 - 讓基於 webdriver 的日常調試方便些
    其實我們在編寫腳本的時候除了設計階段, 一定的時間是在調試測試步驟和element上. 但是常規的寫法在調試的時候每次總是要重啟webdriver包括seleium和appium, 不是很方便. 其實這個功能在一些收費的工具上是作為基本步驟的, 比如UFT或者RFT等功能自動化工具.
  • 面試官:觀察過 chrome 調試工具的請求體麼?Form Data 和 Request Payload 有什麼區別?
    前言這篇文章旨在記錄自己解惑過程,比如在 chrome 調試工具中,Form Data 和 Request Payload 有什麼區別?application/x-www-form-urlencoded 和 application/json 有什麼區別?開發中我們應該怎麼選擇?
  • R語言對接高級語言Fortran
    2 如何對接2.1 新建R project選擇R package using devtools一般選擇R package對接Fortran代碼,對接完成之後,不需要修改,直接適用於windows、Linux和mac作業系統。
  • PerDev 1.2 發布,for Per.js 2.5+ 版本的官方調試插件
    PerDev 1.2 今天發布了,它是用來調試2.5+版本的Per.js的Chrome內核瀏覽器插件。