Chrome開發者工具實戰:調試三劍客

在前端開發的世界里,Chrome開發者工具就是我們的瑞士軍刀,它集成了各種強大的功能,幫助我們快速定位和解決代碼中的問題。今天,就讓我們一起來看看如何使用Chrome開發者工具中的“調試三劍客”:斷點調試、調用棧跟蹤和控制臺輸出變量。

一、斷點調試:代碼的“檢查站”

斷點調試就像是在高速公路上設置的檢查站,當代碼執行到某個特定位置時,它會停下來,讓我們可以查看當前的變量值、調用棧等信息,看看代碼是否按預期運行。

1. 設置斷點

在Chrome開發者工具中,打開“Sources”面板,找到你要調試的JavaScript文件。點擊代碼行號的左側,設置一個斷點。當代碼執行到這一行時,會自動暫停。

2. 暫停與恢復

代碼暫停后,你可以查看當前的變量值、調用棧等信息。點擊“Resume script execution”按鈕(或按F8),代碼將繼續執行。

3. 單步調試
  • Step Over:執行當前行,不進入函數內部。

  • Step Into:進入當前行調用的函數內部。

  • Step Out:執行完當前函數并退出。

4. 條件斷點

僅在您提供的條件為 true 時觸發的條件斷點。例如,只有在某個變量達到特定值時才暫停代碼執行。

let count = 0;
while (count < 10) {count++;// 在這里設置條件斷點,當 count === 5 時暫停
}
5. 異常斷點

在捕獲的異常或未捕獲的異常上設置斷點。這可以幫助你快速定位到代碼中拋出異常的地方。

案例:異常斷點

function divide(a, b) {if (b === 0) {throw new Error("除數不能為零");}return a / b;
}function calculate() {let result = divide(10, 0); // 這里會拋出異常return result;
}calculate();

調試步驟:

  1. 打開Chrome開發者工具,切換到“Sources”面板。

  2. 在“Debugger”部分,找到“Breakpoints”選項。

  3. 勾選“Pause on exceptions”選項。

  4. 執行代碼,當代碼拋出異常時,開發者工具會自動暫停在拋出異常的行。

6. XHR斷點

當請求的網址與您提供的子字符串匹配時觸發的XHR斷點。這在調試網絡請求時非常有用。

案例:XHR斷點

function fetchData() {let xhr = new XMLHttpRequest();xhr.open("GET", "https://api.example.com/data");xhr.onload = function() {console.log("Data loaded:", xhr.responseText);};xhr.send();
}fetchData();

調試步驟:

  1. 打開Chrome開發者工具,切換到“Sources”面板。

  2. 在“Debugger”部分,找到“XHR/Breakpoints”選項。

  3. 輸入要匹配的URL子字符串,例如“example.com”。

  4. 執行代碼,當發送匹配的XHR請求時,開發者工具會自動暫停。

二、調用棧跟蹤:代碼的“偵探”

調用棧跟蹤就像是偵探破案時的線索追蹤,它記錄了函數調用的順序,幫助我們找到代碼中的“罪魁禍首”。

案例:調用棧跟蹤

function add(a, b) {return a + b;
}function multiply(a, b) {return a * b;
}function calculate() {let sum = add(5, 10);let product = multiply(sum, 2);return product;
}calculate();

調試步驟:

  1. 打開Chrome開發者工具,切換到“Sources”面板。

  2. multiply函數內部設置一個斷點。

  3. 執行代碼,當代碼暫停時,打開“Call Stack”面板。

  4. 查看調用棧,可以看到函數調用的順序:calculate ?-> multiply

  5. 點擊調用棧中的某一行,可以跳轉到對應的函數定義處。

三、控制臺輸出變量:實時查看變量值

控制臺輸出變量就像是給代碼加了一個“監視器”,可以實時查看變量的值,幫助我們了解代碼的運行狀態。

1. 輸出變量

在代碼中使用console.log()console.info()console.warn()console.error()等方法輸出變量。

let name = "John";
let age = 30;
console.log("Name:", name);
console.log("Age:", age);
2. 查看輸出

打開Chrome開發者工具的“Console”面板,查看輸出的變量值。

3. 條件輸出

可以使用console.log()的條件輸出功能,只在滿足特定條件時輸出變量。

let age = 30;
if (age > 25) {console.log("Age is greater than 25:", age);
}

四、實戰示例

下面是一個綜合示例,展示如何使用Chrome開發者工具進行調試:

function calculateSum(a, b) {let sum = a + b;console.log("Sum:", sum); // 輸出變量return sum;
}function main() {let a = 5;let b = 10;let result = calculateSum(a, b);return result;
}// 設置斷點
let finalResult = main();

調試步驟:

  1. 打開Chrome開發者工具,切換到“Sources”面板。

  2. 找到包含上述代碼的文件,點擊main函數內部的某一行設置斷點。

  3. 執行代碼,當代碼暫停時,查看調用棧和變量值。

  4. 使用單步調試功能,逐步執行代碼,觀察變量的變化。

  5. 查看“Console”面板中的輸出,確認變量值是否符合預期。

五、總結

Chrome開發者工具中的斷點調試、調用棧跟蹤和控制臺輸出變量是web逆向的得力助手。通過這工具,我們可以快速逆向得到的算法和邏輯是否正確。

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

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

相關文章

函數柯里化(Currying)介紹(一種將接受多個參數的函數轉換為一系列接受單一參數的函數的技術)

文章目錄 柯里化的特點示例普通函數柯里化實現使用Lodash進行柯里化 應用場景總結 函數柯里化&#xff08;Currying&#xff09;是一種將接受多個參數的函數轉換為一系列接受單一參數的函數的技術。換句話說&#xff0c;柯里化將一個多參數函數轉化為一系列嵌套的單參數函數。 …

torch.nn中的非線性激活介紹合集——Pytorch中的非線性激活

1、nn.ELU 基本語法&#xff1a; class torch.nn.ELU(alpha1.0, inplaceFalse)按元素應用 Exponential Linear Unit &#xff08;ELU&#xff09; 函數。 論文中描述的方法&#xff1a;通過指數線性單元 &#xff08;ELU&#xff09; 進行快速準確的深度網絡學習。 ELU 定義為…

Databend Cloud Dashboard 全新升級:直擊痛點,釋放數據價值

自 Databend Cloud 上線以來&#xff0c;我們一直致力于為用戶提供高效的數據處理與可視化體驗。早期&#xff0c;我們在工作區的“圖表”區域推出了輕量級可視化功能&#xff0c;支持積分卡、餅圖、柱狀圖和折線圖四種展示方式。這些功能簡單易用&#xff0c;基本滿足了用戶對…

Android Fresco 框架擴展模塊源碼深度剖析(四)

Android Fresco 框架擴展模塊源碼深度剖析 一、引言 在 Android 開發領域&#xff0c;圖片處理一直是一個重要且具有挑戰性的任務。Fresco 作為 Facebook 開源的強大圖片加載框架&#xff0c;在圖片的加載、緩存和顯示等方面已經提供了非常完善的功能。然而&#xff0c;為了滿…

藍橋杯最后十天沖刺 day 2 雙指針的思想

雙指針思想介紹 雙指針&#xff08;Two Pointers&#xff09;是一種在數組或鏈表等線性結構中常用的算法技巧&#xff0c;通過使用兩個指針&#xff08;索引或引用&#xff09;以不同的速度或方向遍歷數據結構&#xff0c;從而高效解決問題。雙指針通常用于優化暴力解法&#…

Axure 使用筆記

1.Axure如何制作頁面彈窗 https://blog.csdn.net/SDTechnology/article/details/143948691 2.axure 怎么點擊按鈕打開新頁面 &#xff08;1&#xff09;新建交互 &#xff08;2&#xff09;單擊是觸發 &#xff08;3&#xff09;選擇打開鏈接 &#xff08;4&#xff09;選擇…

STM32實現一個簡單電燈

新建工程的步驟 建立工程文件夾&#xff0c;Keil中新建工程&#xff0c;選擇型號工程文件夾里建立Start、Library、User等文件夾&#xff0c;復制固件庫里面的文件到工程文件夾工程里對應建立Start、Library、User等同名稱的分組&#xff0c;然后將文件夾內的文件添加到工程分組…

html5炫酷圖片懸停效果實現詳解

html5炫酷圖片懸停效果實現詳解 這里寫目錄標題 html5炫酷圖片懸停效果實現詳解項目介紹技術棧核心功能實現1. 頁面布局2. 圖片容器樣式3. 炫酷懸停效果縮放效果傾斜效果模糊效果旋轉效果 4. 懸停文字效果5. 性能優化6. 響應式設計 項目亮點總結 項目介紹 本文將詳細介紹如何使…

Playwright與Browser Use:領略AI賦能UI自動化測試的魔法魅力

目錄 Browser Use是什么&#xff1f; Playwright簡介 框架設計的核心目標與原則 Playwright 在 UI 自動化測試中的優勢 如何高效攔截錯誤 實現視頻錄制 UI自動化框架設計的挑戰 測試框架的結構與模塊化設計 自動化測試不是銀彈 走進Browser Use 橫空出世的背景與意義…

Uniapp 實現微信小程序滑動面板功能詳解

文章目錄 前言一、功能概述二、實現思路三、代碼實現總結 前言 Uniapp 實現微信小程序滑動面板功能詳解 一、功能概述 滑動面板是移動端常見的交互組件&#xff0c;通常用于在頁面底部展開內容面板。本文將介紹如何使用 Uniapp 開發一個支持手勢滑動的底部面板組件&#xff0…

【FAQ】HarmonyOS SDK 閉源開放能力 —Push Kit(12)

1.問題描述&#xff1a; pushdeviceid的長度是固定的嗎&#xff1f; 解決方案&#xff1a; 在鴻蒙系統中&#xff0c;設備ID的長度是固定的。 2.問題描述&#xff1a; 通過REST API三方推送IM類消息&#xff0c;如何實現應用處于前臺時不展示三方推送通知。 解決方案&…

【小兔鮮】day02 Pinia、項目起步、Layout

【小兔鮮】day02 Pinia、項目起步、Layout 1. Pinia2. 添加Pinia到Vue項目3. 案例&#xff1a;Pinia-counter基礎使用3.1 Store 是什么&#xff1f;3.2 應該在什么時候使用 Store? 4. Pinia-getters和異步action4.1 getters4.2 action如何實現異步 1. Pinia Pinia 是 Vue 的專…

Android學習之計算器app(java + 詳細注釋 + 源碼)

運行結果&#xff1a; 基礎的四則運算&#xff1a; 可能會出現的問題以及解決方法&#xff1a; 問題1&#xff1a;出現多個操作符。 例子&#xff1a;12 解決方法&#xff1a; 在用戶點擊操作符之后&#xff0c;去檢查之前的最后一位&#xff0c;如果最后一位也是操作符的話…

GMap.NET + WPF:構建高性能 ADS-B 航空器追蹤平臺

ADS-B 簡介 ADS - B&#xff08;Automatic Dependent Surveillance - Broadcast&#xff0c;廣播式自動相關監視&#xff09;是一種先進的航空監視技術。它依靠飛機上的機載設備&#xff0c;自動收集諸如飛機的位置、高度、速度、航向等關鍵數據&#xff0c;并周期性地以廣播的…

關于testng.xml無法找到類的問題

問題&#xff1a;testng.xml添加測試類的時候飄紅 解決辦法&#xff1a; 1.試圖通過自動生成testng.xml插件去解決&#xff0c;感覺也不是這個問題&#xff0c;沒有嘗試&#xff1b; 2.以為是創建包的方式不對&#xff0c;重新刪除后新建--還是找不到 想新建類的時候發現從m…

數據在內存中存儲(C語言)

文章目錄 前言一、整數在內存中的存儲1.1 計算機存儲數據的基本單位示例代碼 1.2 無符號整數的存儲1.3 有符號整數的存儲&#xff08;補碼&#xff09;示例代碼 二、大小端字節序和字節序判斷2.1 什么是大小端&#xff1f;示例代碼 2.2 為什么會有大小端&#xff1f;2.3 字節序…

Python爬蟲第2節-網頁基礎和爬蟲基本原理

目錄 一、網頁基礎 1.1 網頁的組成 1.2 網頁的結構 1.3 節點樹及節點間的關系 1.4 選擇器 二、爬蟲的基本原理 2.1 爬蟲概述 2.2 能抓怎樣的數據 2.3 JavaScript 渲染頁面 一、網頁基礎 使用瀏覽器訪問網站時&#xff0c;我們會看到各式各樣的頁面。你是否思考過&…

python-leetcode 64.在排序數組中查找元素的第一個和最后一個位置

題目&#xff1a; 給一個按照非遞減順序排列的整數數組nums,和一個目標值target,請找出給定目標值在數組中的開始位置和結束位置。 如果數組中不存在目標值target,返回[-1,-1] 方法一&#xff1a;二分查找 直觀的思路肯定是從前往后遍歷一遍。用兩個變量記錄第一次和最后一次…

分享一些新版GPT-4o使用方式!能多模態生圖!

目前GPT-4o的整體測評&#xff0c;真的很驚艷。 不知道又有多少人因為OpenAI的這次更新而失業&#xff0c;當然只要AI用得好&#xff0c;會有更多人因之而受益&#xff01;很多人表示不知道怎么用&#xff0c;對于門外漢來說&#xff0c;4o似乎有點高端。 今天就給大家介紹幾…

軟件工程面試題(二十四)

1、連接池的原理 j2ee 服務器啟動時會建立一定數量的池連接,并一直維持不少于此數量的池連接。當客戶端程序需要連接時,吃驅動程序會返回一個未使用的池連接并將其標記為忙。如果當前 沒有空閑連接,池驅動就建立一定新的 連接 2、用javascript編寫腳本小程序,實現點擊全選…