前端工程師生產環境 debugger 技巧

大家好,我是若川。持續組織了6個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan12?參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》?包含20余篇源碼文章。歷史面試系列

導言

開發環境 debug 是每個程序員上崗的必備技能。生產環境呢?雖然生產環境 debug 是一件非常不優雅的行為,但是由于種種原因,我們又不得不這么干。

那我們今天講一講如何使用 chrome 在生產環境進行 debug 。

b4302cd518f4d2fa87de40ced6910747.png

生產環境 debug 步驟

生產環境 debug 需要幾步?這問題和“把大象裝進冰箱攏共分幾步”一樣簡單。

第一步,把冰箱門打開。F12 打開 devTools;

第二步,把大象裝進冰箱。找到需要 debug 的前端文件,格式化,打斷點,調試上下文,定位問題;

第三步,關閉冰箱門。解決問題。

如何快速定位錯誤是前端還是后端接口返回的?

在把大象裝進冰箱之前,先初步判斷下,是否真的需要由你將大象裝進冰箱。

首先我們需要判斷,錯誤是前端還是后端報的,那么如何快速判斷?

方案一:根據對代碼的實現的了解,判斷報錯屬于前端還是后端。

這個方案前提是需要你對代碼實現很熟悉,也是最簡單的方式。

方案二:前端代碼全局搜索關鍵字,工程代碼里搜索/控制臺打開搜索。

對應工程 gitlab 或者 vscode 或者 devTools global search 里去進行全局搜索。

方案三:翻閱 network 面板中的請求。

翻閱 network 面板中的請求,看下返回的 response 是否攜帶錯誤提示,有則表示后端返回的;如果報錯的接口剛好是以非200 的狀態返回,或者是由新的操作觸發調用接口,我們很快就能查找到對應的接口,如下:

b6eb41c3dbe4d49e4518b3ef045ecbf3.png

方案四:使用 network search 進行搜索。

但是很多情況,接口業務錯誤會以 http status ?200 的狀態碼返回,如果此時請求了大量的接口(舉個例子:進入頁面調用了大量的接口,其中有一個接口返回了錯誤信息),那么除了逐個翻閱 network 這種低效的方式,chrome devTools 還提供了 network search 面板這種更便捷的方式,可以搜索接口詳細信息(包括詳細的返回信息),返回匹配結果。

如何打開 network search 面板?

在 network 面板中,按快捷鍵 ?? + F(Mac)、 CTRL + F(Windows)可呼出 network search 面板。

1e97bf9f9e8fd2693d251bba4278d22f.png

如果確定需要你把大象裝進冰箱,那把大象裝進冰箱的技巧有哪些?

如何快速定位到問題相關的代碼

global search ,全局搜素關鍵字,再定位到關鍵的代碼

chrome devTools 的 global search 是一個非常實用的一個功能,當你不知道需要調試的代碼在哪個文件時,當你是一個非常大的系統,引用了很多的資源文件,你可以使用 global search 進行搜索關鍵字,這個操作會搜索所有加載進來的資源,點擊搜索結果,就可以使用 source 面板打開對應的資源文件,然后格式化代碼,再然后在當前的文件內 再次搜索關鍵字,打斷點。

打開 global search 快捷鍵:

? + ? + F (Mac),CTRL + SHIFT + F (Windows)

看下圖例子,我們隨便找個頁面根據提示搜索代碼:

860c8da0f3f26d78e0f3070ad8302080.png

可以嘗試使用哪些關鍵字進行搜索:

(1) 頁面存在明確的報錯信息,且已經明確該錯誤文案是寫在前端代碼中錯誤信息文案。提示信息在 coding 過程中一般是使用 字符串,壓縮混淆過程中一般是不會進行處理的,會保留原文,當然代碼打包構建過程中,對代碼壓縮混淆也可以選擇對中文進行 unicode 轉碼,此時如果關鍵字是中文,就需要先轉碼再搜索了。

(2) 已知相關代碼中存在的編譯混淆后依然還保留的的關鍵代碼,會向外暴露的方法名;

如何 debug 混淆后的 js ?

生產環境的 js 基本上都是混淆過的(點擊了解前端代碼的壓縮混淆 (https://todo.com/)),壓縮混淆的優點就不贅述了,壓縮混淆后隨之來的是生產環境調試的難度,雖然通過打斷點,勉強還能看的懂,但是已經很反人類了。

我們用一個最簡單的 demo ,對比一下代碼生產環境構建編譯前后的差距。

這里選擇用 vue-cli 創建了一個最簡單的 demo ,看下源代碼和編譯后的代碼。

源代碼:

c4f1061da70946153182cc67a9bffdee.png

構建編譯后的代碼(此處關閉了 sourceMap ):

8c985d66f0f8d49e51c44b7972fa5f5c.png

這里我們看到構建編譯后的代碼做了壓縮混淆,出現了出現了大量大的 abcd 替換了原有的函數方法名、變量名,編譯后的代碼已經不是能通過單純的讀代碼碼能讀懂的了。但是我們通過 debug ,大概還是能看得懂。

9a34aa388938a26003c07534877caf49.png

那么有沒有方式使用本地的 sourceMap 調試生產環境的代碼?答案當然是有的。

a597ab3e575b795820433e325efd41be.png

如何在生產環境使用本地 sourceMap 調試?

第一步:打開混淆代碼

第二步:右鍵 -> 選擇【Add source map】

第三步:輸入本地 sourceMap 的地址(此處需要啟用一個靜態資源服務,可以使用 http-server (https://www.npmjs.com/package/http-server)),完成。本地代碼執行構建命令,注意需要打開 sourceMap 配置,編譯產生出構建后的代碼,此時構建后的結果會包含 sourceMap 文件。

5b63d00b4324e934dde1adccebca30e1.pngc333ca68ea5fc777676c965224756ff6.png

關聯上 sourceMap 后,我們就可以看到 sources -> page 面板上的變化了

eb775434c34ce2e1201f18655e13420d.png

如何在 chrome 中修改代碼并調試?

開發環境中,我們可以直接在 IDE 中修改代碼,代碼的變更就直接更新到了瀏覽器中了。那么生產環境,我們可以直接在 chrome ?中修改代碼,然后立馬看代碼修改后的效果嗎?

當然,你想要的 chrome devTools 都有。chrome devTools 提供了 local overrides 能力。

local overrides 如何工作的?

指定修改后的文件的本地保存目錄,當修改完代碼保存的時候,就會將修改后的文件保存到你指定的目錄目錄下,當再次加載頁面的時候,對應的文件不再讀取網絡上的文件,而是讀取存儲在本地修改過的文件。

local overrides 如何使用?

首先,打開 sources 下的 overrides 面板;

然后,點擊【select folder overrides】選擇修改后的文件存儲地址;

再然后,點擊頂部的授權,確認同意;

最后,我們就可以打開文件修改,修改完成后保存,重新刷新頁面后,修改后的代碼就被執行到了。

??注意,原js文件直接 format 是無法修改的;在代碼 format 之前先添加無效代碼進行代碼變更進行保存,然后再 format 就可以修改;

606282474af26a020080f25ab08b33ae.png

總結

chrome 調試技巧遠遠當然不只這些,以上只是生產環境 debug 的小技巧,祝愿大家用不到,最好的 bug 處理方式當然是事前,在上線前得到就解決;如果真的發生問題,如果做好監控和日志,在問題發生的第一時間發現并解決。

參考文獻

  • https://developer.chrome.com/docs/devtools/

7ecf0f006349f8058fcad3b29c1ae01e.gif

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》20余篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經堅持寫了8年,點擊查看年度總結。
同時,最近組織了源碼共讀活動,幫助3000+前端人學會看源碼。公眾號愿景:幫助5年內前端人走向前列。

903f4ef53c82444757cb5915ed773b4c.png

掃碼加我微信 ruochuan02、拉你進源碼共讀

今日話題

略。分享、收藏、點贊、在看我的文章就是對我最大的支持~

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

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

相關文章

bmp轉jpg(使用libjpeg)

jpg壓縮原理可以參考這篇文章http://hi.baidu.com/tiandsp/item/f5a2dcde6ef1405bd73aae41,我很早以前轉的一篇文章。 沒有使用libjpeg的壓縮代碼可以看看這篇文章http://hi.baidu.com/tiandsp/item/9b5843c58a3b4474cfd4f841,也是我很早以前轉的。 這次…

figma設計_Figma與Adobe XD:我們如何選擇下一個設計工具

figma設計The time came for changes and our design team started raising the topic again about how we should consider moving away from Sketch. This is not the first time this question came to mind, but this time seems like it was serious. Last summer we cons…

一個小廠前端 Leader 如何篩選候選人?

大家好,我是若川。持續組織了8個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列本文作…

figma設計_如何在Figma中構建設計入門套件(第1部分)

figma設計Figma教程 (Figma Tutorial) Do you like staring at a blank canvas every time you start a new project in Figma?每次在Figma中啟動新項目時,您是否喜歡盯著一塊空白的畫布? I’m guessing you’re not a big fan right, but it’s a pra…

純靠技術,很難進入大廠了。。。

日前,國務院印發《“十四五”時期就業促進規劃的通知》,其中明確指出,要完善終身學習體系,推進高水平大學開放教育資源,暢通在職人員繼續教育與終身學習通道。為響應國家政策,現臨時擴大招生規模&#xff0…

十天學會ASP.Net——(8)

1. ajax入門AJAX Extensions工具箱 (1)實現又刷新改變字體大小和無刷新改變字體大小 頁面設計: 前臺頁面設計: 首先需要在用到ajaxExtensions控件的位置之前放置一個ScriptManager控件,它將在瀏覽頁面時不可見&#xf…

聊聊 computed 影響性能的場景

大家好,我是若川。持續組織了8個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列前言在…

saej1929_(1929年-2020年)

saej1929Milton Glaser, the legendary graphic designer who co-founded New York Magazine, created the iconic ‘I ? NY’ logo, the psychedelic Bob Dylan poster, and the Brooklyn Brewery logo, passed away yesterday at the age of 91 on his birthday, June 26, 2…

Chap2-構造函數語意學

如果一個類沒有任何constructor,那么會有一個default constructor被隱式的聲明出來,一個implicit default constructor將是一個trivial(無用的)constructor。但是在某些情況下,implicit default constructor將是一個no…

【熱點】React18正式版發布,未來發展趨勢是?

大家好,我是若川。持續組織了8個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列2022年…

不要重新發明輪子_是否重新發明輪子

不要重新發明輪子Design is a profession that thrives on creativity. Us designers are constantly trying to innovate by thinking outside the box. We’ve seen design evolve across all sectors — print, digital, product, architecture etc. We have gone from type…

asp.net mvc批量刪除的實現

<form action"Index" method"post"> <div> {<table><thead> <tr> <th width"100">編號</th><th width"100">名字</th></tr></thead> <tbody> foreach (var…

點擊頁面元素,這個Vite插件竟然幫我打開了Vue組件文件!超級好用!

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以點此加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列前言這…

shields 徽標_符號,標志,文字標記:徽標類型的綜合指南

shields 徽標Designers and non-designers alike struggle with common terminology when talking about brand marks, often using different terms interchangeably. When it comes to clarifying definitions, sometimes even the most seasoned professionals get confused…

【原創】SVM小結

理論基礎&#xff1a; 機器學習有三類基本的問題&#xff0c;即模式識別、函數逼近和概率密度估計&#xff0e; SVM有著嚴格的理論基礎&#xff0c;建立了一套較好的有限訓練樣本下機器學習的理論框架和通用方法。他與機器學習是密切相關的&#xff0c;很多理論甚至解決了機器學…

React 18 帶給我們的驚喜

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以點此加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列這篇文…

建模心法(2)——邁出建模第一步

原文地址&#xff1a;http://www.cnblogs.com/1-2-3/archive/2008/08/04/model-method-part1.html 原文作者&#xff1a;景春雷 一錯再錯的這故事才精彩 ——樸樹 《我愛你再見》摘要 即使讀了再多的書、跟過再多的項目&#xff0c;…

Web:你知道我這十幾年是怎么過來的嗎?!

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以點此加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列1989 …

設計師更高效_如何丟掉我的工作使我成為一名更好的設計師

設計師更高效I lost my job a few times early on in my design career. In the process of getting back up after a job loss, it has made me a better designer not only in terms of hard skills but the soft skills required to be more resilient and empathetic, whic…

【ASP.NET】登陸成功后如何跳轉到上一個頁面

當用戶瀏覽網頁的時候會在某個地方需要用戶登陸才能繼續瀏覽&#xff0c;用戶登陸之后會自動跳轉到剛剛瀏覽的頁面。這個步驟是怎么實現的呢&#xff1f;net小伙在查閱相關資料實踐之后終于明白了&#xff0c;其實很簡單&#xff0c;先分享給大家吧。 當用戶在瀏覽一個頁面的時…