這篇文章將為大家詳細(xì)講解有關(guān)怎么用VScode代碼調(diào)試Python,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元定興做網(wǎng)站,已為上家服務(wù),為定興各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
觀看窗口
評估表達(dá)式
當(dāng)?shù)厝?/p>
參數(shù)
擴大孩子
斷點
條件斷點
暫停(進(jìn)入)正在運行的程序
自定義啟動目錄
要熟悉這些常規(guī)功能,請查看VS Code調(diào)試文章。本文僅討論那些特定于Python的注意事項。
要選擇調(diào)試配置,請選擇邊欄中的調(diào)試視圖,然后從下拉列表中選擇一個選項:
在調(diào)試時,狀態(tài)欄顯示左下角的當(dāng)前配置,當(dāng)前的調(diào)試解釋器位于右側(cè)。選擇配置會顯示列表,您可以從中選擇不同的配置:
默認(rèn)情況下,調(diào)試器使用與python.pythonPath
VS Code其他功能相同的設(shè)置。要使用不同的解釋器,請pythonPath
在調(diào)試器設(shè)置中設(shè)置該值?;蛘?,在狀態(tài)欄上選擇指定的解釋器以選擇不同的解釋器。
注:調(diào)試器設(shè)置不支持相對路徑,包括依賴主
python.pythonPath
設(shè)置時。要解決此問題,請使用環(huán)境變量,或者創(chuàng)建一個變量,例如${workspaceFolder}
解析到您的項目文件夾,然后在該路徑中使用該變量,如in"python.pythonPath": "${workspaceFolder}/venv/bin/python"
。
要查看所有配置,請launch.json
通過選擇配置下拉列表旁邊的齒輪圖標(biāo)打開:
下一節(jié)將介紹默認(rèn)或標(biāo)準(zhǔn)的“Python:當(dāng)前文件”配置。本文還介紹了調(diào)試特定應(yīng)用程序類型下的其他配置。
注意:如果您想嘗試新的實驗性調(diào)試器,請參閱Issue 538(GitHub)上的說明。
標(biāo)準(zhǔn)配置為launch.json
:
{ "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", }
以下各節(jié)介紹各種設(shè)置的自定義配置。
name
提供出現(xiàn)在VS Code下拉列表中的調(diào)試配置的名稱。
type
標(biāo)識要使用的調(diào)試器的類型; 將此設(shè)置留給python
Python代碼。
request
指定開始調(diào)試的模式:
launch
:在中指定的文件上啟動調(diào)試器 program
attach
:將調(diào)試器附加到已經(jīng)運行的進(jìn)程。有關(guān)示例,請參閱遠(yuǎn)程調(diào)試。
program
提供python程序入口模塊的完全限定路徑。推薦值為${file}
,它使用編輯器中的活動文件。但是,對于具有多個文件的程序,您可以指定程序的啟動文件。例如:
"program": "/Users/Me/Projects/PokemonGo-Bot/pokemongo_bot/event_handlers/__init__.py",
您還可以依賴工作區(qū)根目錄中的相對路徑。例如,如果根是/Users/Me/Projects/PokemonGo-Bot
那么你可以使用以下內(nèi)容:
"program": "${workspaceFolder}/pokemongo_bot/event_handlers/__init__.py",
pythonPath
指向Python解釋器用于調(diào)試目的。如果未指定,則默認(rèn)為python.pythonPath
設(shè)置中標(biāo)識的解釋器,這相當(dāng)于使用該值${config:python.pythonPath}
。要使用不同的解釋器,請改為指定其路徑。
您可以通過將指定特定于平臺的路徑pythonPath
命名的父對象中osx
,windows
或者linux
。例如,PySpark的配置使用以下值:
"osx": { "pythonPath": "^\"\\${env:SPARK_HOME}/bin/spark-submit\"" }, "windows": { "pythonPath": "^\"\\${env:SPARK_HOME}/bin/spark-submit.cmd\"" }, "linux": { "pythonPath": "^\"\\${env:SPARK_HOME}/bin/spark-submit\"" },
args
指定傳遞給Python程序的參數(shù),例如:
"args": [ "--quiet", "--norepeat" ],
stopOnEntry
設(shè)置為true時,在調(diào)試程序的第一行中斷開調(diào)試器。如果省略(默認(rèn))或設(shè)置為false,則調(diào)試器將程序運行到第一個斷點。
console
指定如何顯示程序輸出。
值 | 顯示輸出的地方 |
---|---|
"none" | VS代碼調(diào)試控制臺 |
"integratedTerminal" (默認(rèn)) | VS代碼集成終端 |
"externalTerminal" | 獨立控制臺窗口 |
cwd
指定調(diào)試器的當(dāng)前工作目錄,它是代碼中使用的任何相對路徑的基礎(chǔ)文件夾。如果省略,默認(rèn)為${workspaceFolder}
(在VS代碼中打開的文件夾)。
作為一個例子,說${workspaceFolder}
包含一個py_code
文件夾包含app.py
,和一個data
文件夾包含salaries.csv
。如果啟動調(diào)試器py_code/app.py
,則數(shù)據(jù)文件的相對路徑根據(jù)以下值而變化cwd
:
CWD | 數(shù)據(jù)文件的相對路徑 |
---|---|
省略或 ${workspaceFolder} | data/salaries.csv |
${workspaceFolder}/py_code ) | ../data/salaries.csv |
${workspaceFolder}/data | salaries.csv |
debugOptions
一系列可能包含以下內(nèi)容的附加選項:
選項 | 描述 |
---|---|
"RedirectOutput" (默認(rèn)) | 使調(diào)試器將程序的所有輸出打印到VS Code調(diào)試輸出窗口中。如果省略此設(shè)置,則所有程序輸出不顯示在調(diào)試器輸出窗口中。該選項在使用時通常會被省略,"console": "integratedTerminal" 或者"console": "externalTerminal" 因為不需要在調(diào)試控制臺中復(fù)制輸出。 |
"DebugStdLib" | 啟用標(biāo)準(zhǔn)庫函數(shù)的調(diào)試。 |
"Django" | 激活特定于Django Web框架的調(diào)試功能。 |
"Sudo" | 與...一起使用時"console": "externalTerminal" ,允許調(diào)試需要提升的應(yīng)用程序。捕獲密碼需要使用外部控制臺。 |
"Pyramid" | 在調(diào)試金字塔應(yīng)用程序時使用。 |
env
為除調(diào)試器始終繼承的系統(tǒng)環(huán)境變量之外的調(diào)試器進(jìn)程設(shè)置可選的環(huán)境變量。
envFile
包含環(huán)境變量定義的文件的可選路徑。請參閱配置Python環(huán)境 - 環(huán)境變量定義文件。
配置下拉菜單為常規(guī)應(yīng)用程序類型提供了各種不同的選項:
組態(tài) | 描述 |
---|---|
PySpark | 使用PySpark而不是默認(rèn)解釋器運行程序,使用pythonPath 前面在pythonPath選項下顯示的特定于平臺的值。 |
Python模塊 | 替換program 設(shè)置"module": "module.name" 以調(diào)試特定模塊。使用此配置時,請將該值替換為所需的模塊名稱。 |
集成終端/控制臺 | 將"console": "integratedTerminal" 選項添加到標(biāo)準(zhǔn)配置。 |
外部終端/控制臺 | 將"console": "externalTerminal" 選項添加到標(biāo)準(zhǔn)配置。 |
Django的 | 指定"program": "${workspaceFolder}/manage.py" 并"args": ["runserver", "--noreload", "--nothreading"] 添加“Django”和“RedirectOutput” debugOptions 。請注意,在調(diào)試時不能自動重新加載Django應(yīng)用程序。要調(diào)試Django HTML模板,請?zhí)砑訑帱ctemplates 。 |
燒瓶 | 請參閱下面的Flask調(diào)試。 |
金字塔 | 刪除program ,添加"args": ["${workspaceFolder}/development.ini"] 并添加“金字塔”和“重定向輸出” debugOptions 。 |
沃森 | 指定"program": "${workspaceFolder}/console.py" 和"args": ["dev", "runserver", "--noreload=True"] |
Scrapy | 指定"program": "~/.virtualenvs/scrapy/bin/scrapy" ,添加"console": "integratedTerminal" 選項并添加"args": ["crawl", "specs", "-o", "bikes.json"] 。 |
附加(遠(yuǎn)程調(diào)試) | 請參閱以下遠(yuǎn)程調(diào)試。 |
遠(yuǎn)程調(diào)試和Google App Engine還需要具體步驟。有關(guān)調(diào)試單元測試(包括nosetest)的詳細(xì)信息,請參閱單元測試。
要調(diào)試需要管理員權(quán)限的應(yīng)用程序,請在中使用"console": "externalTerminal"
并包含“Sudo” debugOptions
。
{ "name": "Flask", "type": "python", "request": "launch", "stopOnEntry": false, "pythonPath": "${config:python.pythonPath}", "module": "flask", "cwd": "${workspaceFolder}", "env": { "FLASK_APP": "${workspaceFolder}/app.py" }, "args": [ "run", "--no-debugger", "--no-reload" ] },
正如你所看到的,這個配置指定"stopOnEntry": false
,"env": {"FLASK_APP": "${workspaceFolder}/app.py"}
和"args": ["run", "--no-debugger","--no-reload"]
。該"module": "flask"
屬性被用來代替program
。
遠(yuǎn)程調(diào)試允許您在VS代碼本地執(zhí)行一個程序,同時在遠(yuǎn)程計算機上執(zhí)行它。在這種情況下,必須在兩臺計算機上都有源代碼。
在開發(fā)和遠(yuǎn)程計算機上,安裝ptvsd 3.0.0(3.0.0
完全版本- 更高版本尚不支持#514)。
在兩臺計算機的源代碼中,添加以下行,用適當(dāng)?shù)拿艽a替換_my_secret_以驗證遠(yuǎn)程調(diào)試,并用合適的IP地址(或)和端口號替換_地址_localhost
:
import ptvsd ptvsd.enable_attach("my_secret", address = ('0.0.0.0', 3000)) # Enable the line of source code below only if you want the application to wait until the debugger has attached to it #ptvsd.wait_for_attach()
僅在遠(yuǎn)程計算機上,取消注釋上面的最后一行。您希望在開發(fā)機器上保留注釋行,以確保兩臺機器上的源代碼與行符合。
啟動遠(yuǎn)程程序。
選擇附加(遠(yuǎn)程調(diào)試)(下面)配置,然后修改remoteRoot
為指向該程序的遠(yuǎn)程計算機上的位置,并修改host
,port
以及secret
在上面添加的源代碼中的值匹配。
{ "name": "Attach (Remote Debug)", "type": "python", "request": "attach", "localRoot": "${workspaceFolder}", "remoteRoot": "${workspaceFolder}", "port": 3000, "secret": "my_secret", "host": "localhost" }
通過SSH進(jìn)行調(diào)試
視窗:
使用sshd_config或類似命令在遠(yuǎn)程計算機上啟用ssh端口轉(zhuǎn)發(fā)。
建立一個PuTTY SSH隧道:
閱讀使用PuTTY設(shè)置SSH隧道(直到“打開會話”部分)。
在“隧道”屏幕上,使用本地模式,源端口(本地計算機上的入口點端口)可能與目標(biāo)端口(服務(wù)器上的端點)不同。
目標(biāo)地址應(yīng)該是本地主機或127.0.0.1
地址(這是遠(yuǎn)程SSH服務(wù)器用于建立隧道的地址)。
Linux的:
跑 ssh -L sourceport:localhost:destinationport user@remoteaddress
接下來,驗證您可以在SSH會話中看到提示。然后打開VS Code并將端口配置為顯示在Tunnels屏幕上的調(diào)試端口。
最后,啟動程序并按照上一節(jié)所述附加調(diào)試器。
Google App Engine自己啟動一個應(yīng)用程序,因此在VS Code調(diào)試器中啟動它不是直接可能的。相反,我們需要在應(yīng)用中使用ptvsd,然后以允許VS Code附加其調(diào)試器的模式啟動Google App Engine。
下載ptvsd并將其文件解壓縮到工作文件夾中的ptvsd文件夾中。(如果使用不同的文件夾,請修改pydev_startup.py
步驟4中創(chuàng)建的文件中的路徑)。
tasks.json
使用以下內(nèi)容創(chuàng)建一個文件:
{ "version": "2.0.0", "tasks": [ { "label": "Launch Google App Engine", "command": "python", "type": "shell", "args": [ "/usr/local/google_appengine/dev_appserver.py", "--python_startup_script=${workspaceFolder}/pydev_startup.py", "--automatic_restart=no", "--max_module_instances=default:1", "${workspaceFolder}/app.yaml" ] } ] }
在Windows和Linux上,將第一項內(nèi)容替換args
為安裝Google App Engine的路徑(上面的源代碼中顯示的路徑適用于MacOS)。
在您的項目根目錄下創(chuàng)建一個名為pydev_startup.py的文件,其中包含以下內(nèi)容,并按照說明修改:
import sys import os #Assuming that pdvsd is located in the working folder sys.path.append(os.getcwd()) import ptvsd # Modify the secret and port number as desired; you're debugging locally so the values don't matter. # However, be sure the port is not blocked on your computer. ptvsd.enable_attach(secret = 'gae', address = ('0.0.0.0', 3000)) #The debug server has started and you can now use VS Code to attach to the application for debugging print("Google App Engine has started, ready to attach the debugger")
launch.json
使用Attach(遠(yuǎn)程調(diào)試)配置作為模板創(chuàng)建配置。確保秘密和端口值與上面源代碼中的內(nèi)容匹配。
添加"preLaunchTask": "python"
到launch.json
。
從命令面板中,運行“ 運行構(gòu)建任務(wù)”命令。這將打開任務(wù)輸出窗口,您可以在其中看到各種消息。
一旦看到消息“Google App Engine已啟動,準(zhǔn)備好連接調(diào)試器”,請使用遠(yuǎn)程調(diào)試配置啟動VS Code調(diào)試器。
在需要的地方設(shè)置斷點,然后啟動瀏覽器以啟動應(yīng)用程序。
調(diào)試器可能無法正常工作的原因很多。調(diào)試控制臺經(jīng)常會顯示具體原因,但有兩個具體原因如下:
python可執(zhí)行文件的路徑不正確:請檢查pythonPath
用戶設(shè)置中的值。
觀察窗口中的表達(dá)式無效(請參閱下面的示例):清除Watch窗口中的所有表達(dá)式并重新啟動調(diào)試器。
Traceback (most recent call last): File ".../visualstudio_py_debugger.py", line 1646, in loop cmd() File ".../visualstudio_py_debugger.py", line 1918, in command_execute_code thread.run_on_thread(text, cur_frame, eid, frame_kind, repr_kind) File ".../visualstudio_py_debugger.py", line 1246, in run_on_thread self.schedule_work(lambda : self.run_locally(text, cur_frame, execution_id, frame_kind, repr_kind)) File ".../visualstudio_py_debugger.py", line 1238, in schedule_work self.unblock() File ".../visualstudio_py_debugger.py", line 1234, in unblock self._block_lock.release() RuntimeError: release unlocked lock
關(guān)于“怎么用VScode代碼調(diào)試Python”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。