深入講解VsCode各場景高級調試與使用技巧 代碼編寫效率提升2倍

VsCode自從誕生以來,以其各自優(yōu)異的特性迅速走紅。尤其是對于前端開發(fā)小伙伴來說,幾乎成為必不可少的開發(fā)工具。所以,熟練掌握VsCode的各自使用技巧與調試技巧會讓你的日常開發(fā)工作效率倍增。本文將會以大量圖文的方式,從下面幾個方面詳細介紹VsCode的各種技巧:
- 第一部分主要介紹VsCode的基本技巧,比如常用快捷鍵、輔助標尺等。熟悉此部分的可以直接跳過。
- 第二部分主要各種斷點(比如日志斷點、內聯(lián)斷點、表達式斷點等等)、數(shù)據(jù)面板等等
- 第三部分主要講解各種項目的調試實戰(zhàn),比如Node程序、TS程序、Vue程序、Electron程序、Html等的調試實戰(zhàn)
- 最后一部分將會講解其他有用的技巧,比如代碼片段、重構、Emmet等等
基本技巧
快速啟動
VsCode安裝后,會自動寫入環(huán)境變量,終端輸入code
即可喚起VsCode應用程序。
常用快捷鍵
ctrl + p
快速搜索文件并跳轉,添加:
可以跳轉到指定行
ctrl + shift + p
根據(jù)您當前的上下文訪問所有可用命令。ctrl + shift + c
在外部打開終端并定位到當前項目路徑ctrl + 按鍵1左邊的符號
顯示隱藏終端面板Ctrl+B
切換側邊欄Ctrl+\
快速拆分文件編輯alt + 單機左鍵
添加多處光標alt + shift + 單擊左鍵
同一列所有位置添加光標alt + shift + 鼠標選擇
選擇相同開始和結束的區(qū)域
alt + 上鍵或下鍵
將當前行或者選中的區(qū)域上移/下移一行 垂直標尺
在配置文件中添加如下配置,可以增加字符數(shù)標尺輔助線
"editor.rulers": [40, 80, 100] 復制代碼
進階技巧
斷點的基本使用
下面以在VsCode中快速調試一個Node項目為例,演示斷點的基本使用。后文會繼續(xù)結束各種高級斷點。
- 創(chuàng)建一個基本的node項目為Nodejs
- 打開左側調試面板,選擇你要調試的node項目名稱,添加調試配置
- 選擇調試的項目類型為Node.js
- 打開生成的.vscode/launch.json文件,指定程序入口文件
program
字段用于指定你的程序入口文件,${workspaceFolder}
表示當前項目根路徑
在程序中添加斷點,只需要點擊左側的邊欄即可添加斷點
按F5
開始調試,成功調試會有浮窗操作欄
浮窗的操作按鈕功能依次為:
- 繼續(xù)(
F5
)、 - 調試下一步(
F10
)、 - 單步跳入(
F11
)、 - 單步跳出(
Shift F11
)、 - 重新調試(
Ctrl + Shift + F5
)、 - 結束調試(
Shift + F5
)
日志斷點
日志斷點是普通斷點的一種變體,區(qū)別在于不會中斷調試,而是可以把信息記錄到控制臺。日志斷點對于調試無法暫?;蛲V沟姆諘r特別有用。步驟如下:
- 添加日志斷點的步驟
- 輸入要日志斷點的信息,點擊回車添加完成
可以使用{}
使用變量,比如在此處添加日志斷點,b的值為$
- 日志斷點添加成功后會有是一個菱形圖標
- 按
F5
運行查看調試結果
表達式條件斷點
條件斷點是表達式結果為true
時才會進行斷點,步驟如下:
- 在代碼行左側右擊,也可以添加斷點,此處選擇添加條件斷點
- 填寫表達式,按回車鍵
- 添加成功的小圖標如下
- 按
F5
調試,條件成立所以進行了斷點
命中計數(shù)斷點
只有該行代碼命中了指定次數(shù),才會進行斷點。步驟如下:
- 選擇條件斷點,切換為命中次數(shù)選項,填寫命中次數(shù)
- 填寫成功如下圖所示
- 按
F5
調試,如圖所示,index為9時才中斷
內聯(lián)斷點
僅當執(zhí)行到達與內聯(lián)斷點關聯(lián)的列時,才會命中內聯(lián)斷點。這在調試在一行中包含多個語句的縮小代碼時特別有用。比如for循環(huán),短路運算符等一行代碼包含多個表達式時會特別有用。步驟如下:
- 在指定位置按
Shift + F9
- 調試之后,每次運行到該內聯(lián)處的代碼都會中斷
補充知識點:數(shù)據(jù)面板介紹
- 數(shù)據(jù)面板可以查看所有變量
- 在變量上點擊右鍵,可以設置變量值、復制變量值等操作
- 聚焦于數(shù)據(jù)面板時,可以通過鍵入值來搜索過濾。點擊下圖所示按鈕可以控制是否篩選。
補充知識點:監(jiān)聽面板介紹
可以將變量添加到監(jiān)聽面板,實時觀察變量的變化。
- 在變量面板通過右鍵選擇“添加到監(jiān)視”將變量添加到監(jiān)聽面板
- 也可以直接在監(jiān)聽面板選擇添加按鈕進行變量添加
- 添加變量后就可以實時監(jiān)聽變量的變化
補充知識點:調試服務器時打開一個URI
開發(fā) Web 程序通常需要在 Web 瀏覽器中打開特定 URL,以便在調試器中訪問服務器代碼。VS Code 有一個內置功能“ serverReadyAction ”來自動化這個任務。
- 一段簡單的server代碼
{ "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/app.js", "serverReadyAction": { "pattern": "listening on port ([0-9]+)", "uriFormat": "http://localhost:%s", "action": "openExternally" } } 復制代碼
- 配置launch.json,以支持打開URI
{ "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/app.js", "serverReadyAction": { "pattern": "listening on port ([0-9]+)", "uriFormat": "http://localhost:%s", "action": "openExternally" } } 復制代碼
pattern
是設置匹配的程度端口號,端口號放在小括號內,即作為一個正則的捕獲組使用。uriFormat
映射為URI,其中%s
使用pattern
中的第一個捕獲組替換。最后使用該URI作為外部程序打開的URI。
- 按
F5
調試,會自動打開瀏覽器,且會在下圖所示處中斷,當繼續(xù)執(zhí)行后,瀏覽器才能看到輸出了server的內容
終局:各場景調試實戰(zhàn) 調試NodeJS項目
關于NodeJs項目的調試方法,已經在上述的斷點的基本使用部分做了介紹,可以網上滾動翻閱。
調試Typescript項目
- 調試TS項目前,先創(chuàng)建一個TS項目
- 先初始化一個ts程序,生成默認的
tsconfig.json
文件
# 終端運行 tsc --init 復制代碼
- 打開
tsconfig.json
文件,開啟sourceMap選項和指定編譯后輸出的路徑
VS Code 內置了對 Ts 調試的支持。為了支持調試 Ts 與正在執(zhí)行的 Js 代碼相結合,VS Code 依賴于調試器的source map在 Ts 源代碼和正在運行的 Js 之間進行映射,所以需要需要開啟sourceMap
選項。
{ "sourceMap": true, "outDir": "./out" } 復制代碼
- 新建index.ts文件,寫一個基本的ts代碼
const num: number = 123; console.log(num); function fn(arg: string): void { console.log('fn', arg); } fn("Hello"); 復制代碼
- 手動編譯調試TS
在上述的ts基本項目中:
終端執(zhí)行ts的編譯命令tsc
此時可以看到生成了out文件夾,里面包含一個index.js
和一個index.js.map
文件
在index.ts中隨意添加一個斷點
按F5
或者運行 -> 啟動調試
,此時可以看到可以正常debug調試
- 通過構建任務構建調試TS
按Ctrl+Shift+B
或選擇終端 -> 運行生成任務
,此時會彈出一個下拉菜單
選擇tsc構建選項
,此時可以看到自動生成了編譯文件
注意,如果你使用的是其他終端(比如cmder
)的話,有可能會生成不了,如下圖所示,使用默認的powershell即可:
調試的話和上述步驟一樣,在有了編譯后的文件后,按F5
即可
- 監(jiān)視改變并實時編譯
按Ctrl + Shift + B
選擇監(jiān)視選項,可以實時監(jiān)視文件內容發(fā)生變化,重新編譯
如下圖所示,會實時編譯
補充知識點:tasks配置文件的創(chuàng)建方式
- 方法1:點擊
終端 -> 配置任務 -> 選擇任務
可以生成對應的tasks.json配置
- 方法2:點擊
終端 -> 運行生成任務 -> 點擊設置圖標
也可以生成對應的tasks.json配置
補充知識點:每次調試時重新編譯
按上述的操作已經生成了task.json配置文件
{ "version": "2.0.0", "tasks": [ { "type": "typescript", "tsconfig": "tsconfig.json", "problemMatcher": [ "$tsc" ], "group": "build", "label": "tsc: 構建 - tsconfig.json" } ] } 復制代碼
- 點擊
運行 -> 添加配置 -> 選擇nodejs
- 在生成的
launch.json
文件中,添加preLaunchTask
字段,值是tasks.json
的label
值,一定要相同,注意大小寫。該字段的作用是在執(zhí)行命令前先執(zhí)行改task
任務。
注意,如果編譯后的js文件不在相應的位置,通過圖中的outFiles
字段可以指定ts
編譯后的js
路徑。
- 在
index.ts
文件中按F5
啟動調試,可以看到調試前已經生成了編譯文件,而后就可以正常調試了。
補充知識點:VsCode的TS版本說明
vscode本身內置了對ts的支持
vscode內置的ts版本(即工作區(qū)版本),僅僅用于IntelliSense(代碼提示),工作區(qū)ts版本與用于編譯的ts版本無任何關系。
修改工作區(qū)ts版本的方法:
- 在狀態(tài)欄選擇typescript的圖標,選擇版本切換
- 選擇你需要的版本即可
調試html項目
學會了上述ts的調試后,我們嘗試調試html文件,并且html文件中引入ts文件:
- 創(chuàng)建html,引入ts編譯后的js文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h3>Hello</h3> <script src="./out/index.js"></script> </body> </html> 復制代碼
- ts源文件如下:
const num: number = 1221; console.log(num); function fn(arg: string): void { console.log('fn', arg); } document.body.append('World') fn("he"); 復制代碼
- 打debug
- launch.json啟動命令配置
{ // 使用 IntelliSense 了解相關屬性。 // 懸停以查看現(xiàn)有屬性的描述。 // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "pwa-chrome", "request": "launch", "name": "Launch Chrome", "url": "file:///E:/demo/vscode/debug/ts/index.html", "preLaunchTask": "tsc: 構建 - tsconfig.json", "webRoot": "${workspaceFolder}" } ] } 復制代碼
- 選擇我們的啟動命令
- 按
F5
可以正常喚起chrome瀏覽器,并在vscode的ts源碼處會有debug效果
調試Vue項目的兩種方式
下面介紹兩種調試vue2項目的3種方法,其他框架的調試也類似:
不使用vscode插件Debugger for chrome的方法
- 初始化vue項目,配置
vue.config.js
,指定要生成sourceMaps資源
module.exports = { configureWebpack: { // 生成sourceMaps devtool: "source-map" } }; 復制代碼
- 根目錄下創(chuàng)建
./vscode/launch.json文件
或者選擇運行 -> 添加配置 -> Chrome
{ "version": "0.2.0", "configurations": [ { "type": "chrome", "request": "launch", "name": "vuejs: chrome", "url": "http://localhost:8080", "webRoot": "${workspaceFolder}", "breakOnLoad": true, "pathMapping": { "/_karma_jpgack_": "${workspaceFolder}" }, "sourceMapPathOverrides": { "jpgack:/*": "${webRoot}/*", "/./*": "${webRoot}/*", "/src/*": "${webRoot}/*", "/*": "*", "/./~/*": "${webRoot}/node_modules/*" }, "preLaunchTask": "serve" } ] } 復制代碼
添加任務腳本
{ "version": "2.0.0", "tasks": [ { "label": "serve", "type": "npm", "script": "serve", "isBackground": true, "problemMatcher": [ { "base": "$tsc-watch", "background": { "activeOnStart": true, "beginsPattern": "Starting development server", "endsPattern": "Compiled successfully" } } ], "group": { "kind": "build", "isDefault": true } } ] } 復制代碼
該腳本的作用是運行npm run serve
編譯命令。
按F5
啟動調試即可
注意:此方式的主要點在于launch.json
配置文件中,通過preLaunchTask
字段指定調試前先運行一個任務腳本,preLaunchTask
的值對應tasks.json
文件中的label
值。
借助vscode插件Debugger for Chrome在Chrome中調試
- 第一步還是初始化vue項目,添加
vue.config.js
文件配置,指定要生成sourceMaps資源
module.exports = { configureWebpack: { // 生成sourceMaps devtool: "source-map" } }; 復制代碼
- vscode中擴展中安裝
Debugger for Chrome
插件,并確保沒有禁用插件
- 手動啟動項目的運行, 此方式不需要配置
tasks.json
任務
# 終端執(zhí)行命令,啟動項目 npm run serve 復制代碼
按F5
啟動調試即可
借助vscode插件Debugger for Firfox
在Firefox中調試
- 和
Debugger for Chrome
基本一樣,區(qū)別在于安裝Debugger for Firfox
插件,并在launch.json配置中,增加調試Firefox的配置即可,配置如下
{ "version": "0.2.0", "configurations": [ // 省略Chrome的配置... // 下面添加的Firefox的配置 { "type": "firefox", "request": "launch", "reAttach": true, "name": "vuejs: firefox", "url": "http://localhost:8080", "webRoot": "${workspaceFolder}/src", "pathMappings": [{ "url": "jpgack:///src/", "path": "${webRoot}/" }] } ] } 復制代碼
- 調試時選擇對應的調試命令即可
Firefox初始啟動時不會觸發(fā)調試,需要刷新一次
調試Electron項目
Electron很多人都使用過,主要用于開發(fā)跨平臺的系統(tǒng)桌面應用。那么來看下vue-cli-electron-builder
創(chuàng)建的Electron
項目怎么調試。步驟如下:
- 在初始化項目后,首先修改
vue.config.js
文件配置,增加sourceMaps配置:
module.exports = { configureWebpack: { devtool: 'source-map' } } 復制代碼
- 創(chuàng)建調試配置
.vscode/launch.json
{ "version": "0.2.0", "configurations": [ { "name": "Electron: Main", "type": "node", "request": "launch", "protocol": "inspector", "preLaunchTask": "bootstarp-service", "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron", "windows": { "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd" }, "args": ["--remote-debugging-port=9223", "./dist_electron"], "outFiles": ["${workspaceFolder}/dist_electron/**/*.js"] }, { "name": "Electron: Renderer", "type": "chrome", "request": "attach", "port": 9223, "urlFilter": "http://localhost:*", "timeout": 0, "webRoot": "${workspaceFolder}/src", "sourceMapPathOverrides": { "jpgack:///./src/*": "${webRoot}/*" } }, ], "compounds": [ { "name": "Electron: All", "configurations": ["Electron: Main", "Electron: Renderer"] } ] } 復制代碼
此處配置了兩個調試命令: Electron: Main
用于調試主進程,Electron: Renderer
用于調試渲染進程;compounds[].
選項用于定義復合調試選項; configurations
定義的復合命令是并行的; preLaunchTask
用于配置命令執(zhí)行前先執(zhí)行的任務腳本,其值對應tasks.json
中的label
字段; preLaunchTask
用在compounds
時,用于定義configurations
復合任務執(zhí)行前先執(zhí)行的腳本。
- 創(chuàng)建任務腳本
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "bootstarp-service", "type": "process", "command": "./node_modules/.bin/vue-cli-service", "windows": { "command": "./node_modules/.bin/vue-cli-service.cmd", "options": { "env": { "VUE_APP_ENV": "dev", "VUE_APP_TYPE": "local" } } }, "isBackground": true, "args": [ "electron:serve", "--debug" ], "problemMatcher": { "owner": "custom", "pattern": { "regexp": "" }, "background": { "beginsPattern": "Starting development server\\.\\.\\.", "endsPattern": "Not launching electron as debug argument was passed\\." } } } ] } 復制代碼
- 啟動調試
在主進程相關代碼上打上斷點,然后啟動調試主進程命令就可以調試主進程了
注意,這里的options
參數(shù)是根據(jù)實際的情況,自定義添加我們運行項目時所需要的參數(shù),比如我這里因為啟動項目的npm命令是:
"serve-local:dev": "cross-env VUE_APP_TYPE=local VUE_APP_ENV=dev vue-cli-service electron:serve" 復制代碼
- 主進程調試成功
- 開始調試渲染進程
切換到渲染進程的調試選項,在渲染進程的代碼處打上斷點,點擊調試。注意,此時并不會有斷點終端,需要ctrl+r
手動刷新軟件進程才會看到渲染進程的斷點。
刷新渲染進程后的效果,如下圖,已經進入了斷點
另一種方式
同時開啟渲染進程和主進程的調試,只需要切換到調試全部的選項即可。注意,此種方式因為compounds[].configurations
配置是并行執(zhí)行的,并不一定能保證渲染進程調試一定能附加到主進程調試成功(估計是時機問題),有些時候會調試渲染進程不成功。所以,可以采取上面的方式進行調試。
其他技巧
技巧一:代碼片段(snippets)
從擴展商店中安裝snippets
@category:"snippets" 復制代碼
創(chuàng)建全局代碼片段
- 選擇
文件 -> 首選項 -> 用戶片段
- 選擇
新建全局代碼片段文件
添加代碼片段文件的文件名稱,會生成.code-snippets
后綴的文件
定義用戶片段
{ "自動補全console.log": { "scope": "javascript,typescript", "prefix": "log", "body": [ "console.log('$1');", "$2" ], "description": "輸出console.log('')" } } 復制代碼
在鍵盤輸入log
時效果如下
指定光標處的默認值并選中
"body": [ "console.log('${1:abc}');" ], 復制代碼
指定光標處的默認值有多個,并提供下拉選擇
用兩個豎線包含多個選擇值,|多個選擇值直接用逗號隔開|
"body": [ "console.log('${1:abc}');", "${2|aaa,bbb,ccc|}" ], 復制代碼
新建當前工作區(qū)的代碼片段
只需要選擇文件 -> 首選項 -> 用戶片段 -> 新建xxx文件夾的代碼片段
, 新建后會在當前工作區(qū)生成.vscode/xxx.code-snippets
文件
技巧二:Emmet
vscode內置了對Emmet的支持,無需額外擴展。
技巧三:對光標處代碼變量快速重命名
選中或者光標所處的位置,按F2
可以對所有的變量重命名
技巧四:代碼重構建議 選中要重構的代碼,點擊出現(xiàn)的黃色小燈的圖標
選中重構的類型
輸入新的變量名
還可以重構到函數(shù)
TS中還可以提取接口等等
補充:VsCode擴展插件開發(fā)
VsCode擴展插件可以做什么事情?
- 定制主題、文件圖標
- 擴展工作臺功能
- 創(chuàng)建webView
- 自定義新的語言提示
- 支持調試特定的runtime
基于Yeoman
快速開發(fā)VsCode插件,步驟如下:
安裝Yeoman
和用于生成模板的插件VS Code Extension Generator
# 終端運行,主要node版本需要12及以上,node10會安裝報錯 npm i -g yo generator-code 復制代碼
運行yo code
創(chuàng)建命令,選擇要生成的項目模板。這里演示New extension
根據(jù)提示依次選擇
生成的內容如下
按F5
生成編譯項目,此時會自動打開一個新窗口在新窗口按Ctrl+Shfit+P
,輸入Hello World
命令
此時會彈出一個彈窗的效果
至此,一個最簡單的插件就完成了
相關文章
VS Code怎么設置分支排序順序? 按提交人日期分支排序的技巧
VS Code怎么設置分支排序順序?VS Code中想要控制分支的排序順序,在哪來設置呢?下面我們就來看看VSCode按提交人日期分支排序的技巧2023-08-19VSCode的autopep8插件無法自動格式化含中文的utf-8編碼文件錯誤的解決
配置autopep8插件并安裝相關依賴后,VSCode無法自動格式化含有中文的代碼文件,這里就為大家分享一下解決方法2023-09-24VSCode選項卡上的擴展怎么關閉出發(fā)? vscode不顯示觸發(fā)選項卡上的擴展技
VSCode選項卡上的擴展怎么關閉出發(fā)?VSCode選項卡中可以出發(fā)擴展,也可以關閉觸發(fā),該怎么操作呢?下面我們就來看看vscode不顯示觸發(fā)選項卡上的擴展技巧2023-10-07vscode怎么關閉啟用預覽? VSCode取消右側預覽面板的技巧
vscode怎么關閉啟用預覽?vscode中可以預覽,該怎么開啟或者關閉預覽面板呢?下面我們就來看看VSCode取消右側預覽面板的技巧2023-10-16VSCode合并運行按鈕怎么關閉? VSCode關閉一鍵運行的技巧
VSCode合并運行按鈕怎么關閉?雖然合并運行很方便但是有時候用不到,想要關閉,該怎么操作呢?下面我們就來看看VSCode關閉一鍵運行的技巧2025-04-03VS Code怎么取消自動簽名? VSCode關閉總是簽字的技巧
VS Code怎么關閉自動簽名?VSCode中可以自動簽名,現(xiàn)在想要關閉自動簽字,該怎么操作呢?下面我們就來看看VSCode關閉總是簽字的技巧2023-10-16VS Code怎么開啟緊湊視圖? VSCode設置緊密檢視的技巧
VS Code怎么開啟緊湊視圖?VS Code中可以設置視圖樣式,該怎么使用緊湊樣式呢?下面我們就來看看VSCode設置緊密檢視的技巧2023-10-16- VS Code單元焦點指示器槽怎么設置?VS Code中想要設置單元焦點指示器槽的位置上,該怎么設置呢?詳細請看下文介紹2023-10-16
VSCode怎么設置不顯示空值? VSCode不顯示空值的設置技巧
VSCode怎么設置不顯示空值?VSCode中的空值也會顯示,想要不顯示空值,該怎么操作呢?下面我們就來看看Visual Studio Code設置不顯示空值的方法2023-11-27VSCode導航欄怎么顯示函數(shù)? VSCode設置顯示函數(shù)的方法
VSCode導航欄怎么顯示函數(shù)?VSCode中的函數(shù)很常用,想要顯示在導航欄,該怎么操作呢?下面我們就來看看VSCode設置顯示函數(shù)的方法2023-11-27