急速 debug 實戰二(瀏覽器 - 除錯線上篇)

藍色的秋風發表於2019-02-19

1.急速 debug 實戰一 (瀏覽器 - 基礎篇)

2.急速 debug 實戰二 (瀏覽器 - 線上篇)

3.急速 debug 實戰三 (Node - webpack外掛,babel外掛,vue原始碼篇)

通過前一篇的介紹,我們已經懂得基本的 debug 技巧,那麼我們如何快速除錯一些線上的問題呢。本文將線上的除錯分為以下三種:(當然有更好的除錯方式,可以在評論區提出)

  1. 線上即時修改;針對一些樣式以及一些 js 已經知道問題所在快速地修改以達到解決 bug 的模式。
  2. 代理到原生程式碼; 這種情況可以解決線上程式碼與本地不一致,也可以非常方便地在原始碼插入程式碼立即除錯
  3. 線上不存在 sourceMap 啟用本地sourceMap; 有時候一些問題乍一眼看不出是什麼問題,但是線上又不提供 sourceMap 所以我們可以啟動本地的 sourceMap 來幫助我們定位問題。

所以示例在以下環境通過。

作業系統: MacOS 10.13.4

Chrome: 版本 72.0.3626.81(正式版本) (64 位)

線上即時修改

開啟功能

在除錯線上問題的時候,我們會遇到這樣的問題,例如: 我需要在頁面上直接修改樣式快速地定位問題,可能是某些樣式不相容,導致渲染不成功。但是每當我們再 devTools 上修改完,我們想重新重新整理頁面。這個時候我們修改的東西都不見了。下面我介紹的這個功能就是能夠讓我們更好地除錯線上問題,並且保持狀態。

chrome devTools 有一個名叫 Overrides 的功能。這個功能對於我們線上除錯有著極大的幫助

  1. 開啟: yifenghua.win/example/deb…
  2. 通過按 Command+Option+I (Mac)Control+Shift+I(Windows、Linux),開啟 DevTools。 此快捷方式可開啟 Console 皮膚。
  3. 點選 source 按鈕

1550042488255.jpg

  1. 點選箭頭所示按鈕,找到 Overrides, 選中。

  2. 點選 Select folders for Overrides。選擇一個本地的空資料夾目錄。

  3. 跳出授權,點選允許

    1550043161526.jpg

開始

這是我們剛才的頁面

1550044581302.jpg

假設我們設計稿需要我們將背景色改成紅色,並且字型大小改成22px。我們來進行修改。修改完成後重新整理頁面。開啟後發現是這樣的。

1550047816288.jpg

繼續點選 source 標籤。點選 Page 按鈕。

1550048001733.jpg

開啟我們demo3.html,將head中的 title 改成 debug03,並且儲存(mac: command + s, windows: ctrl + s)。

1550048078356.jpg

再次重新整理頁面,發現我們的頁面 title 已經成功被修改了。

最後,我們點選 source Page 中的 demo3.js。將 card.text = '123';修改成 card.text = 'hello';,繼續儲存。

好了。我們已經完成了我們所有的修改了。

1550048674847.jpg

可以發現我們所有的檔案下面都有一個小藍點。這個就是修改後的檔案儲存在一開始選擇的資料夾中。

檢視 diff

那麼如何檢視我們之前修改了哪些內容呢?

繼續開啟 devTools ,點選右上角的三個小點 -> More tools -> Changes

1550049006069.jpg

可以看到我們剛才的所有修改啦。

1550049082173.jpg

到此我們已經完成了 Overrides 除錯線上的方法了。

代理到原生程式碼

首先需要下載 charles 其他的代理工具也可以,只要能將請求代理到本地的工具都可以,這裡我就用我熟悉的 charles 展示。 那麼這種方式主要能除錯線上的什麼問題呢?

  1. 快速確認本地版本與線上是否一致。如果本地檔案沒有問題,線上有問題,那麼重新打包一次即可。(如果有版本號請忽略)
  2. 除錯程式碼。

除錯程式碼

下面來演示一下,如何除錯線上的程式碼。

假設以上是我們本地的專案。所以為了演示,你需要做以下幾個步驟。

git clone https://github.com/hua1995116/debug.git

cd debug

cd charles-debug

npm install

npx webpack --watch --progress (npm >= v5.2.0)
複製程式碼

然後在我們的 dist 目錄下會生成我們打包後的 js

1550052278719.jpg

  1. 開啟: yifenghua.win/example/deb…

  2. 開啟 devTools 的 netWork 檢視 js 路徑。 yifenghua.win/example/deb…

  3. 開啟我們的 charles (嗯,如何配置和使用我不進行講解,自行百度和 Google 吧)

  4. 點選 Tools 中的 Map Local 進行配置 。

1550052700177.jpg

  1. Add 一個規則

1550052759668.jpg

  1. 將剛才 netWork 中的 url 對映到本地地址(即剛才我們 clone 專案的位置),如圖所示

1550052892041.jpg

  1. 對我們本地內容進行改動。改成如下所示
const card = document.querySelector('.card-link');
card.onclick = function() {
  card.text = '你好';
}
複製程式碼
  1. 再次開啟我們的頁面 yifenghua.win/example/deb…

  2. 檢視 charles 日誌

1550053079374.jpg

可以看到已經成功將檔案對映到本地。這樣,我們就可以實時地除錯我們的線上的檔案啦。你可以插入各種標誌點以及 debugger。

線上不存在 sourceMap 啟用本地sourceMap

嗯,除此之外,我們還可以通過 charles 新增 sourceMap。

修改我們剛才 clone 的專案,修改 webpack.config.js 和 index.js

webpack.config.js

module.exports = {
    entry: './index.js',
    output: {
        filename:'demo3.js'
    },
    devtool: 'source-map',
};
複製程式碼

index.js

const card = document.querySelector('.card-link');
card.onclick = function() {
   console.log(ss);
   card.text = '你好';
}
複製程式碼

執行

npx webpack --watch --progress
複製程式碼

給 charles 再增加一個 Map Local

1550054237183.jpg

現在開啟 yifenghua.win/example/deb…

點選 Card link,發現報錯。

1550054389531.jpg

點選 index.js ,可以看到我們的能直接定位到原始碼啦。

1550054429653.jpg

總結

有了以上三種方式除錯線上程式碼。應該說可以定位到絕大多數數問題了。如果大家有什麼更好的方式可以留言,一起學習下,嗯,真香。 (溜了溜了

更多請關注

友情連結: huayifeng.top/

急速 debug 實戰二(瀏覽器 - 除錯線上篇)

相關文章