JavaScript指定斷點操作

来源:https://www.cnblogs.com/flyfox1982/archive/2018/09/18/9667160.html
-Advertisement-
Play Games

什麼是斷點操作(Breakpoint action) 做前端開發的小伙伴,或許對這個斷點操作不是很熟悉。不過你要是問其他語言(比如C,C++ ,C #等)的開發者,他們應該都挺熟悉斷點操作,這種斷點操作在諸如XCode或者Visual Studio的IDE中都會有提供。 以下一段話來自知乎 斷點操作 ...


什麼是斷點操作(Breakpoint action)

做前端開發的小伙伴,或許對這個斷點操作不是很熟悉。不過你要是問其他語言(比如C,C++ ,C #等)的開發者,他們應該都挺熟悉斷點操作,這種斷點操作在諸如XCode或者Visual Studio的IDE中都會有提供。

以下一段話來自知乎

斷點操作 (Action) 的意義是設置追蹤點 (Tracepoint)。追蹤點相當於是一種臨時的有 Trace 功能的斷點,它會把消息 列印到 Output 視窗。


Breakpoint Action
Breakpoint Action

勾選後面的繼續執行 (Continue Execution),代表 Tracepoint 命中時,Debugger 不會停下來,否則將會在此處停下來。兩種情況下,消息都會列印出來。

JavaScript說:我需要斷點操作

試想一個這樣的場景,我希望程式在運行的時候,可以觀察某一行上某個變數或者表達式的值。你一定會說,這不是很簡單嘛:

  1. 在指定的位置放置debugger語句,或這個在此處打一個斷點,然後使用console或者變數監聽來觀察變數的值。
  2. 動態插入console.log代碼。
    看起來,第二種方式是更好的一種方式。動態插入代碼當然可以使用chrome的live edit功能。當時我們希望有一個不直接修改代碼的方式。此時你或許會想,那就設置一個斷點操作吧。

JavaScript如何設置斷點操作

前端的童鞋們一定知道,JavaScript的調試大部分都是在瀏覽器裡面操作的,而這個瀏覽器,大部分時候是Chrome。因為Chrome的調試功能強大而方便。(相信你不會反對吧)。
然而讓大家失望的是,chrome根本就沒有設置斷點操作的功能啊,自然其他瀏覽器也沒有。相信你此時的心情是這樣的:

沒T你說個XX。

看官們不要著急,且聽我們慢慢道來。在Chrome斷點調試的時候,可以使用條件斷點,所謂條件斷點,指定一個條件,在符合這個條件的時候。執行會停止在斷點處,否則執行直接往下執行。如下圖,在Line Number的地方點擊右鍵,選中 Add conditionnal breakpoint

 

條件斷點
條件斷點

然後,輸入條件,比如params.value == 'value'這樣的條件表達式,如下圖:

 

斷點條件
斷點條件

 

有關條件斷點說明,如果你仍然不是很熟悉的話,可以自己多參考相關資料。
但是,這個斷點操作有什麼關係呢?要知道,JavaScript是一門動態語言。條件判斷其實是可以輸入任何代碼片段的。比如下麵的代碼:

if(express)

即便是express不是一個bool值或者bool值的表達式或者返回bool的函數,都是可以的。這就方便我們的操作。

JavaScript說道 : 我最機智。


不要臉的JavaScript
不要臉的JavaScript

因此在條件斷點的條件輸入框中,我們可以輸入我們想執行的斷點操作即可以,比如console.log。如圖所示

 

斷點操作
斷點操作

最終會在控制台列印出來你要查看的值,如圖所示:

列印結果
列印結果

由於console.log返回值是undefined的(最終轉換為false),所以代碼並不會被停止在此處,而是會直接往下執行,這相當於前面講述斷點操作概念的繼續執行。如果需要停止在這兒,可以設置如下的表達式即可:

 

斷點操作 中斷執行
斷點操作 中斷執行

結語

條件斷點的設計並不是為此而設計的。所以這是一種hack,不是標準方式,不是本來的設計方式。但是,不是很多Web開發都會使用hack的嗎。 用起來方便就行。
通過這種方式,相當於可以不用修改代碼,臨時性的加入我們想執行的代碼片段。
很多同學都喜歡在工程中直接使用console.log,這樣在實際發佈的時候,最終有需要刪除這些console.log代碼,增加了工作量。通過這種方式,或許可以減少原本產品代碼中的consle.log。
使用這種方式,還可以動態改變一些變數的值。我們知道有時候,某些bug只在某些特定的值才能復現,這些值可能是服務端推送過來的,此時調試的值,就可能依賴於後端傳遞的值。其實可以在前端的頁面,通過這種方式,強制改變某些值,使得bug復現,而不依賴於後臺的值。比如:

修改變數
修改變數

參考

https://zhuanlan.zhihu.com/p/28642422
https://www.visualmicro.com/page/User-Guide.aspx?doc=Working-With-Breakpoints-When-Hit.html

歡迎關註公眾號:

 

ITman彪叔公眾號
ITman彪叔公眾號
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在此,先做聲明,本篇僅是摘錄自互聯網,個人認為這篇文章講的很不錯,附於此地與大家共同欣賞。 position的四個屬性值:1.relative2.absolute3.fixed4.static下麵分別講述這四個屬性。<div id="parent"> <div id="sub1">sub1</div ...
  • 學習後的總結: DOM:document object model 關於DOM的簡介:http://www.w3school.com.cn/htmldom/dom_intro.asp 本文說的是HTML DOM 的一些操作: DOM樹:DOM樹將HTML文檔體現為樹狀,DOM樹中有很多節點; DOM ...
  • web開發中經常會有這種情況,在一個主頁面中包含側邊導航菜單和iframe,點擊菜單項,對應頁面會在iframe中顯示,整個頁面不會刷新。但是如果設置了會話Session,在會話過期後再操作會自動redirect重定向到登錄頁面,經常會出現在session過期後,再點擊菜單項,登錄頁面顯示在ifra ...
  • h5界面嵌套在原生app內部的時候,需要調用原生的方法,傳遞數據。中間難以調試代碼,。 用google的 inspect調試。查看數據的傳輸方式。 1、adb連接正常,打開手機USB調試 2、第一次使用的時候一定要保證翻牆!翻牆!翻牆 (不懂的可以問我) 3、谷歌瀏覽器中打開chrome://ins ...
  • 我們知道,js函數有多種寫法,函數聲明 ,函數表達式,Function式構造函數,自執行函數,包括Es6的箭頭函數,Class類寫法,高階函數,函數節流/函數防抖,下麵我就開始講關於上面幾種類型的最基本用法。 函數聲明式寫法 這種寫法是最基本的寫法 ,使用關鍵字 function 定義函數,函數聲明 ...
  • 半年前跳槽, 新公司主要研發傾向於小程式的開發。由於之前並沒有接觸小程式,所以經過半年的實際開發,才敢來做一點筆記。 小程式提供很多組件給開發者使用,但是,實際使用中還是會有很多的問題。 老生常談的不能使用npm開發??? (雖然,已知的很多小程式框架可以實現。例如:mpvue等。但是讓我們先討論討 ...
  • 在 JavaScript 中正確使用地使用 Array 的方法如下: 用 Array.includes 代替 Array.indexOf “如果你要在數組中查找元素,請使用 Array.indexOf”。 MDN 文檔寫道,Array.indexOf 將“返回第一次出現給定元素的索引”。因此,如果我 ...
  • 今天是我們介紹數組系列文章的第五篇,也是我們數組系列的最後一篇文章,只是數據系列的結束,所以大家不用擔心,我們會持續的更新乾貨文章。 生命不息,更新不止! 今天我們就不那麼多廢話了,直接乾貨開始。 我們在《Javascript數組系列一之棧與隊列》中描述我們是如何利用 push、pop、shift、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...