Visiul Studio Code, 簡稱vscode,是一款輕量級代碼編輯器,其豐富的擴展程序使得其可以方便地作為任何語言的編輯器。
本文將講述如何在vscode中對python腳本文件進行debug。
本文主要包括debug的兩種方式:
- 基本debugging(basic debugging):可以解決大部分情況
- 命令行debugging(command line debugging): 用于需要傳參數(shù)繁多或者遠程調試的程序
如難以理解或出現(xiàn)錯誤歡迎指正
0 要求
在vscode擴展(extension)
中先安裝Python擴展。
Python擴展提供了python的語法,運行,環(huán)境選擇等支持,是vscode寫python代碼的一個好助手。
安裝完Python擴展后,打開python腳本文件則會在右下角(低版本可能在左下角)出現(xiàn)環(huán)境設置以選擇你想用的python解釋器
而右上角則會出現(xiàn)運行和debug的選項。
1 基本debugging
-
如果你只是想簡單地debug程序,沒有其他需求,可以直接打斷點,然后右上角點擊debug,程序會自動地debug當前打開的python文件。
-
如果你想定制化一些debug選項,則按照以下步驟進行:
-
側邊欄選擇運行和調試
-
如果你已有dubug配置文件,則跳3. 否則請先創(chuàng)建一個
launch.json
文件
并選擇配置文件為python文件 -
此時你的工作目錄下會多一個目錄
.vscode
和該目錄下一個launch.json
文件,該文件則配置了你的debug配置。在運行和調試側邊欄中點擊綠色三角則啟動debug程序
-
2 debug配置文件
vscode依靠.vscode
目錄下的launch.json
來管理你的debugger程序,下面是一個該文件的實例:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true
}
]
}
其中"configurations"
中的一個實例則為一個debugger程序配置,當想增加多個debugger程序時(如你可能需要兩組不同的參數(shù)分別來debug,而不想每次都修改),則可以在"configurations"
新加一個配置文件,如下所示:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true
},
{
"name": "the second debugger",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true
}
]
}
下面將說明每個debugger配置中鍵值的含義:
name
name
是該debugger的名字,會顯示在運行和調試側邊欄中的下拉框中,比如上面的配置文件則會有以下的下拉框:
選擇對應的debugger,并點擊綠色三角則可以啟動對應的debugger。
type
設置使用什么的debugger,設為python
,無需修改。
request
調試模式,可選:
-
launch
: 在program
指定的文件上啟動debugger -
attach
: 將debugger附到(注入到)一個正在運行的python進程上。用以遠程debug,也可以用來解決多參數(shù)問題,具體請參考后面的部分。
program
提供具體想要debugger去運行的python腳本文件,可以是相對路徑也可以是絕對路徑,比如上面配置文件中的${file}
代表當前vscode激活的文件(即當前打開的,而且輸入光標所在的文件),也可以指定某特定文件,如設置
"program": "${workspaceFolder}/main.py"
則代表在工作目錄下的main.py上啟動debugger。
module
指定需要debug的module,等價于命令行中-m
參數(shù),具體可參考Python.org,一般無需關心。
python
指定需要的解釋器路徑,如果沒有指定則默認為當前工作空間選擇的解釋器(即在你打開python文件時,右下角指定的python解釋器)
pythonArgs
數(shù)組類型
需要傳給解釋器(不是python腳本)的參數(shù),通過數(shù)組給出,如下所示"pythonArgs": ["<arg 1>", "<arg 2>",...]
.
args
數(shù)組類型
傳給python腳本的參數(shù)(請與上面的pythonArgs進行區(qū)分),通過數(shù)組給出,如下所示"args": ["--quiet", "--norepeat", "--port", "1593"]
。
注意:每個參數(shù)必須為單獨一項,不得出現(xiàn)"--port 1593"
的情形,如果參數(shù)過多,可以參考下面命令行debugging的方式。
stopOnEntry
布爾類型
當設為true
,則會自動在被debug的程序上第一行代碼停止,忽略或者設為false
則在第一個斷點停止。
console
如果不指定redirectOutput
的情況下,程序的輸出會輸出到哪里
值 | 輸出位置 |
---|---|
"internalConsole" |
vscode的debug輸出控制臺 |
"integratedTerminal" (default) |
vscode的集成終端 |
"externalTerminal" |
分離的一個輸出窗口 |
autoReload
當修改了代碼后,是否自動重啟debug程序,啟動方式如下:
{
"autoReload": {
"enable": true
}
}
subProcess
是否開啟子程序debug,默認false
。
cwd
設置debugger工作目錄,如果不指定則默認為vscode的工作目錄,會影響你代碼中相對路徑。
redirectOutput
是否重定向輸出到調試控制窗,即下圖該窗口中:
justMyCode
忽略或者設為true
則只會在用戶寫的代碼停留,設為false
則會debug標準庫。
3 命令行debugging
命令行debugging用以遠程debug,或者debug正在運行中的程序,我一般用來解決傳參過多問題。
當需要給腳本文件傳參,而參數(shù)過多時,需要一個一個給配置文件中的args
添加,非常麻煩,所以可以選擇直接運行程序,再進行debug捕捉的方式。
首先在配置文件中加入下面的配置實例:
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
}
}
其次在當前環(huán)境中安裝debugpy,如pip install debugpy
.
通過下面的語法運行想要debug的文件(提前打斷點):
python -m debugpy --listen 5678 --wait-for-client ./myscript.py
然后在運行和調試側邊欄中的下拉框中選擇相應的debugger并啟動,則會自動捕捉該程序并進行debug,如下所示:
該方法在對remote-ssh連接的遠程服務器代碼進行debug時,不需要指定服務器域名和ip,當作本地即可。
技巧
下圖給出了一些我常用的debug功能,僅供參考
文章來源:http://www.zghlxwxcb.cn/news/detail-671904.html
參考文獻
vscode官方文檔文章來源地址http://www.zghlxwxcb.cn/news/detail-671904.html
到了這里,關于如何在vscode中debug python代碼,包括如何優(yōu)雅地傳入多個參數(shù)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!