乾貨 | 前端調試各種收集—斷點篇

2021-02-24 小黑格子屋

當我第一次知道這種東西,我也驚呆了,居然還有這種操作,實在強大到沒朋友,從此愛上調試,按時下班。

無數次通過調試解決問題的經驗告訴我,調試絕對是開發者最應該掌握的重要技能之一。調試能幫助我們定位問題解決問題,每解決一個問題,經驗值就往上漲。

後面就可以考經驗解決很多問題,並且能正確避開當年踩過的雷區,減少再犯次數,節省解決問題的時間,大大提高開發效率和編碼水平。我想這應該是掌握調試技能的一個很重要意義,而不僅僅是為了解決問題。

你是否遇到過以下情況:

按鈕的點擊事件不起作用,點擊按鈕沒反應。下載人家的demo運行,點擊登錄之後不出錯頁面也不跳轉;

請求數據後填充到頁面,但是頁面卻不顯示數據;

某個請求總是被取消;

明明按照人家教程來寫,代碼一模一樣,卻得不到和教程一樣的效果;

無意中寫錯字母,大小寫部分,運行出錯,但是看代碼怎麼都看不出問題;

按照文檔的寫法,控制臺老是報錯,且錯誤發生在使用的組件裡面,不是自己寫的代碼;

等等,還有很多類型的問題。

以上問題基本都可以通過調試解決,只需要掌握相關的調試技巧就可以。

調試的第一步就是打斷點。斷點的目的是,代碼運行時在你想要開始調試的地方停下來。這個時候就可以查看當前上下文信息,比如全局變量、局部變量的值,函數的輸入是否正確,請求的返回值是否正常等。通過此操作判斷問題發生的地方,好對症下藥。

以谷歌瀏覽器(版本為69)為例,編輯器為VSCode(版本1.26.1)


只要找到源碼,在腳本代碼顯示區域左邊的數字上添加斷點即可,之後只要代碼運行到斷點處,開發工具就會進入調試狀態。

注意:有的數字行是灰色的,就是不可斷點。有時候點擊15行斷點選中14行,這是因為瀏覽器真正執行的代碼行不是你看到的那一行,可能是優化掉了或者經過某種轉換。

還有的情況是,添加某一行斷點,會跳轉到另一個頁面並命中某一行,這個頁面的背景色是黃色且文件名是VM開頭。上述情況,大部分都是因為瀏覽器顯示的源碼版本,跟真正的源碼文件不一致,只需要刷新一下頁面,保證顯示的源碼是最新的即可。

技巧1:有時候源碼歷經千辛萬苦都找不到在哪,這時候就需要祭出console.log了。在需要調試的那一行代碼前加上console.log(666),然後運行一次,到控制臺查看結果輸出,點擊右邊的連結會自動跳轉到源碼,這樣就可以直接斷點了。

技巧2:如下圖,在Filesystem添加文件夾到工作路徑,選擇之後會有提示,點擊接受。如果你的谷歌瀏覽器沒有這玩意,請升級版本,還是沒有的話,請忽略這段話。雖然不知道這是什麼時候出的功能,但是我偶然發現的,它可以編輯之後真的保存到文件,這個可以當編輯器用了。


這種方式很粗暴,在需要調試的地方加debugger關鍵字,代碼運行到的時候會自動停下,進入調試模式。

此方法不需要手動斷點,但是麻煩的是可能你調試一次就不用再調試了,但是每次運行到那裡都會停下,必須移除這個代碼才行。

這玩意我在不少網站也見到有人用,不想讓人家方便的查看到網站源碼,一打開控制臺就自動debugger。


這種方式簡單歸為在編輯器中斷點調試,是需要連接調試器(可以是遠程調試器)或者附加進程,然後接收調試信息,就可以在編輯器源碼進行斷點調試。

在Chrome和VS Code中調試Vue.js:此方法出處。這種方式使用VSCode的「Debugger for Chrome」擴展,推薦。感覺就是上面的第一種方式,只不過將源碼映射到本地源碼,並在編輯器上顯示。簡單介紹下步驟:


1、webpack配置:webpack配置添加devtool:'source-map'開啟源碼映射。


module.exports = {
configureWebpack: {
devtool: "source-map"
}
};

2、調試配置:VSCode中按F5,將出現選擇環境的輸入框(如果已有launch.json不會出現),選擇Chrome。在launch.json中的配置如下。其中url是打開瀏覽器之後訪問的地址,webRoot是app.js、main.js等入口文件所在目錄,後面兩個是實驗性功能(高級功能,滑鼠懸停在上面會有說明)

{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "啟動 Chrome 並打開 localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/src",
"breakOnLoad": true,
"sourceMapPathOverrides": {
"webpack:///src/*": "${webRoot}/*"
}
}
]
}

調試:在vue文件組件你想調試的行的斷點,通過命令npm start、npm dev或者npm serve其中一個命令(具體是哪一個可以查看package.json的scripts節點)運行項目。

按F5啟動調試,一切正常的話將會命中你的斷點。

注意:如果沒有命中斷點並且你的斷點不是紅點,需要一個騷操作才能在VSCode斷點調試:在打開的谷歌瀏覽器的開發工具源碼斷點調試一次(或者加關鍵字debugger觸發調試,參考上面方式一),運行到斷點處VSCode會自跳出一個緩存的源碼頁來進行調試。

另外,基於以上情況,如果在VSCode調試的顯示的源碼跟真的源碼不同,那麼就是源碼映射不正確,上面的配置webRoot不正確。即使不正確,通過這個騷操作一樣可以在VSCode調試,就是不太優雅,效果如下:

遠程調試Chrome


這種方式歸為調試nodejs,可以調試webpack配置,或者後端運行的node實例。

這種方式是在啟動node的時候加上--inspect,開啟V8 Inspector功能,通過WebSockets通信,調試器連接即可調試,更多調試器參考官方文檔。以下是幾個示例:

調試vue.config.js,可以在調試查看配置,這樣即使看不懂文檔也可以按照自己的想法來寫配置,甚至根本不用在看文檔。使用方式是在VSCode配置如下,兩種配置等效。調試webpack.config.js同理,將啟動文件替換即可,可查看package.json的scripts節點對應命令確定啟動文件。

{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"args": [
"serve"
],
"program": "${workspaceFolder} /node_modules/@vue/cli-service/bin/v ue-cli-service. js"//client-app/src/aspnet-dev.js"
},
{
"type": "node",
"request": "launch",
"name": "Launch via NPM",
"runtimeExecutable": "node",
"runtimeArgs": [
"--inspect-brk=9229",
". /node_modules/@vue/cli-service/b in/vue-cli-service.js", //"./client-app/src/aspnet-dev. js",
"serve"
],
"autoAttachChildProcesses": true,
"port": 9229
}
]
}

調試aspnetcore的NodeServices其中一種打開方式,這個可以在VSCode進行調試,調試器由VSCode提供,不會自動連接,有點麻煩,建議用下一種,方便。

如果用谷歌瀏覽器的開發工具做調試器,可以嘗試插件nim,啟動node或自動打開標籤頁。或者谷歌瀏覽器自帶的,在Connection處添加連接,檢測到信號會自動連接,在Filesyatem添加需要調試的源碼即可。如果瀏覽器連接了node環境的站點,並且啟用了Inspector,那麼開發工具會有一個圖標可以快速打開node調試器。


作者:笑笑🤞xxred

https://www.cnblogs.com/xxred/p/9616626.html

長按左側二維碼關注

微信ID:xhmsvip

小黑QQ:3251175005

QQ群:809453822

小黑微博:小黑黑的格子屋

相關焦點

  • 前端開發中的JS調試技巧
    前言:調試技巧,在任何一項技術研發中都可謂是必不可少的技能。掌握各種調試技巧,必定能在工作中起到事半功倍的效果。
  • 利用單步運行及斷點設置來調試程序
    這講是第二節「利用單步運行及斷點設置來調試程序(Debugging)」。這套教程從簡單的錄製宏開始講解,一直到窗體的搭建,內容豐富,案例眾多。大家可以非常容易的掌握相關的知識,這套教程面向初學人員,共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。
  • Android產品研發-->Android實用調試技巧
    一片楓葉_劉超的博客地址:http://blog.csdn.net/qq_23547831/作者寫了Android產品研發、源碼解析等多個專題,每個專題包含多篇文章,有興趣可以關注學習。本文為產品研發中的一篇。本文我們將講解Android中的調試技巧。
  • 原來gdb的底層調試原理這麼簡單
    在調試的時候,調試信息中是如何獲取函數調用棧中的上下文信息的呢?針對上面這些疑惑,我們就來聊聊 GDB 的底層調試原理,我們來看一下 GDB 是通過什麼機制來控制指令集的執行。內容比較多,看完本文需要的時間可能長一些,為了您的健康,不建議在處於蹲姿的時候閱讀這篇文章。
  • GDB調試還不會?看這篇就夠了!
    總覽本文為GDB調試指南,參考GDB調試手冊,但加入了很多實例,目前已有的篇目:在Linux使用C/C++進行開發,不了解gdb的基本使用,是有點說不過去的,網上也有官方的GDB教程,或者其他教程,本文是藉助實例,介紹了如何使用GDB進行調試。看完這篇,GDB的日常使用就夠了。
  • 各種前端框架 您應該選擇哪個?
    各種前端框架 您應該選擇哪個?引導程序:行業巨頭前端框架:Bootstrap自2011年首次推出以來,Boostrap一直自豪地躋身最受歡迎的前端框架之列。除此之外,它還提供了各種預樣式化的組件,這些組件包括HTML,CSS和某些情況下的JavaScript。該框架還具有一些基於jQuery的可選JavaScript插件。然而,引導並不能支持從第三方來的任何JavaScript庫,而球隊已經公開宣布他們的計劃在引導5擺脫的jQuery。React:最佳JS選擇當前,React是所有前端JavaScript框架中的第一名。
  • 6 大主流 Web 框架優缺點對比:15篇前端熱文回看
    《Ajax 跨域,這應該是最全的解決方案了》從剛接觸前端開發起,跨域這個詞就一直以很高的頻率在身邊重複出現,一直到現在,已經調試過N個跨域相關的問題了,16年時也整理過一篇相關文章,但是感覺還是差了點什麼,於是現在重新梳理了一下。《2017 前端大事件和趨勢回顧,2018 何去何從?》2017年,前端開發繼續飛速發展。
  • 乾貨 | 25個實用前端網站工具推薦
    目前 CDNJS 在 Web 前端的 CDN 服務中排名第二(第一名是 Google),性能出色。 Beautiful Open -  開源 JS 庫集合https://beautifulopen.com收集各類卓越設計的開源項目,大到CMS內容管理系統,小到常用的Javascript庫,適合網站開發的用戶使用。
  • 用圖文帶你徹底弄懂GDB調試原理
    針對上面這些疑惑,道哥用兩篇文章把這些底層最深處的問題徹底描述清楚,讓你一次看過癮。第一篇文章,就是當前這一篇,主要內容是介紹GDB的底層調試原理,我們來看一下GDB是通過什麼機制來控制被調試程序的執行順序。
  • Chrome Devtools 高級調試指南(新)
    後續會單獨出一篇,以下是目錄:常用命令和調試黑盒腳本:Blackbox Script控制臺內置指令遠程調試WebView1、Chrome Devtools 的用處前端開發:開發預覽、遠程調試、性能調優、bug跟蹤、斷點調試等後端開發:網絡抓包、開發調試Response測試:服務端API數據是否正確
  • 一份官方的 Android Studio 調試應用 技巧!
    正因如此,最近我們找機會了解了 Android Studio 團隊在提升調試速度方面使用的一些技巧。接下來,我們會為您一一呈現那些我們認為最好的、節省您時間的、且方便與您的調試流程整合的小技巧。雖然您的應用可能與本文假想中的示例應用大相逕庭,但是本文所介紹的小竅門可以用在任何應用的開發上。本文分為上下兩篇,本篇為上篇。
  • VisualC++2010調試技巧
    現在就全國計算機二級C語言考試常用的Visual C++2010調試技巧分享給大家,希望能給所有考生帶來幫助。1、斷點  沒有比斷點更常用的調試技巧了,通過點擊代碼左邊邊欄或者移動光標到指定行按F9等都可以添加斷點。值得注意的是並非每一行都可以添加斷點,這個就留給大家去實踐中體會。
  • 斷點回歸:3篇中文綜述和介紹
    此後30年, 該方法並未引起學術界的重視,直到1990年以後, 斷點回歸設計開始被應用於各種領域,並且近年來成為因果分析和政策評估領域最重要的研究方法。Hahn et al(2001)提供了斷點回歸在計量經濟學理論基礎。目前,斷點回歸在教育經濟學、勞動經濟學、健康經濟學、政治經濟學以及區域經濟學的應用仍方興未艾。
  • 斷點回歸前沿-多斷點RDD
    計量百科·資源·乾貨:斷點回歸由Thistlewaite and Campbell(1960)首次使用,但直到1990年代末才引起經濟學家的重視。Thistlethwaite、Campbell於1960年首次提出使用斷點回歸設計研究處理效應, 在該文中他們的目的是研究獎學金對於未來學業的影響, 學生是否獲得獎學金取決於考試的分數。由於獎學金由學習成績決定,故成績剛好達到獲獎標準與差一點達到的學生具有可比性。如果考試分數大於獲獎標準分數, 則進入處理組;如果考試分數小於獲獎標準分數, 則進入控制組。
  • 一款實用的macOS內核調試工具——LLDBagility
    這是Francesco Cagnin有關macOS內核調試的第二篇文章。在上一篇文章中,作者定義了本篇文章中使用的大多數術語,描述了如何為macOS內核實施內核調試,並討論了可用工具的局限性。本篇文章中,我們就介紹LLDBagility,這是上文中為macOS內核實施內核調試的解決方案,可提供更輕鬆,更實用的macOS調試體驗。
  • 小技巧 | 在 Android Studio 調試應用 (上)
    正因如此,最近我們找機會了解了 Android Studio 團隊在提升調試速度方面使用的一些技巧。接下來,我們會為您一一呈現那些我們認為最好的、節省您時間的、且方便與您的調試流程整合的小技巧。雖然您的應用可能與本文假想中的示例應用大相逕庭,但是本文所介紹的小竅門可以用在任何應用的開發上。本文分為上下兩篇,本篇為上篇。我們從經典調試法 —— printf 語句的一個小竅門說起。
  • Go 快速入門篇(三):單元測試、問題定位及代碼調試
    一、單元測試編寫單元測試在 Go 語言中,支持為功能模塊編寫單元測試代碼,繼續以上篇教程構建的計算器項目為例,在 simplemath 包中,我們可以為每一個運算模塊編寫了對應的單元測試代碼。IDE 調試如果你是通過 GoLand 進行開發的話,直接在代碼中設置斷點(單擊對應代碼行即可),然後選中要調試的源碼文件,在右鍵下拉菜單中點擊「Debug」對應的選項即可開始對指定文件代碼進行斷點調試:
  • 【調試逆向】Windbg新手入坑指南
    作者論壇帳號:鬼手56前言這篇文章是我學習windbg的一個筆記和總結
  • 14款優秀的JavaScript調試工具大盤點
    開發人員喜歡使用這個腳本語言來改善用戶界面,提供豐富多彩的功能,或者在網站上製作各種互動元素。  不過,調試JavaScript對正在開發web開發人員而言可以說是一項相當痛苦又艱巨的任務。因此我們收集了一些最好的JavaScript調試工具,希望可以幫助你調試腳本,以實現更精確的結果。誠摯地希望這些我們推薦的工具能為你帶來方便,祝你編程愉快!
  • 大浪淘沙程式設計師精品工具箱軟體推薦2:Firefox與網頁前端調試工具
    因為很多程式設計師的工作內容或者工作單位或者公司一般不會一成不變的,比如你來到一個創業型的公司,那它往往沒有美工、沒有web前端,有時候它還沒有工資... ... 不論怎樣當一名 pc 程式設計師面對 web 前端工作時,實際上是非常吃力的,需要大量的時間去轉換角色,艱難的程度和前端轉做 pc 也差不多。我有一位前端同事無論如何就是看不懂 pc 裡的循環代碼 ...