溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用VScode代碼調(diào)試Python

發(fā)布時(shí)間:2021-10-15 10:28:12 來源:億速云 閱讀:650 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)怎么用VScode代碼調(diào)試Python,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Python擴(kuò)展支持許多類型的Python應(yīng)用程序的調(diào)試,包括以下一般功能:

  • 觀看窗口

  • 評估表達(dá)式

  • 當(dāng)?shù)厝?/p>

  • 參數(shù)

  • 擴(kuò)大孩子

  • 斷點(diǎn)

  • 條件斷點(diǎn)

  • 暫停(進(jìn)入)正在運(yùn)行的程序

  • 自定義啟動目錄

要熟悉這些常規(guī)功能,請查看VS Code調(diào)試文章。本文僅討論那些特定于Python的注意事項(xiàng)。

選擇一個(gè)配置

要選擇調(diào)試配置,請選擇邊欄中的調(diào)試視圖,然后從下拉列表中選擇一個(gè)選項(xiàng):

怎么用VScode代碼調(diào)試Python

在調(diào)試時(shí),狀態(tài)欄顯示左下角的當(dāng)前配置,當(dāng)前的調(diào)試解釋器位于右側(cè)。選擇配置會顯示列表,您可以從中選擇不同的配置:

怎么用VScode代碼調(diào)試Python

默認(rèn)情況下,調(diào)試器使用與python.pythonPathVS Code其他功能相同的設(shè)置。要使用不同的解釋器,請pythonPath在調(diào)試器設(shè)置中設(shè)置該值。或者,在狀態(tài)欄上選擇指定的解釋器以選擇不同的解釋器。

注:調(diào)試器設(shè)置不支持相對路徑,包括依賴主python.pythonPath設(shè)置時(shí)。要解決此問題,請使用環(huán)境變量,或者創(chuàng)建一個(gè)變量,例如${workspaceFolder}解析到您的項(xiàng)目文件夾,然后在該路徑中使用該變量,如in "python.pythonPath": "${workspaceFolder}/venv/bin/python"

要查看所有配置,請launch.json通過選擇配置下拉列表旁邊的齒輪圖標(biāo)打開:

怎么用VScode代碼調(diào)試Python

下一節(jié)將介紹默認(rèn)或標(biāo)準(zhǔn)的“Python:當(dāng)前文件”配置。本文還介紹了調(diào)試特定應(yīng)用程序類型下的其他配置。

注意:如果您想嘗試新的實(shí)驗(yàn)性調(diào)試器,請參閱Issue 538(GitHub)上的說明。

標(biāo)準(zhǔn)配置和選項(xiàng)

標(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è)置留給pythonPython代碼。

request

指定開始調(diào)試的模式:

  • launch:在中指定的文件上啟動調(diào)試器 program

  • attach:將調(diào)試器附加到已經(jīng)運(yùn)行的進(jìn)程。有關(guān)示例,請參閱遠(yuǎn)程調(diào)試。

program

提供python程序入口模塊的完全限定路徑。推薦值為${file},它使用編輯器中的活動文件。但是,對于具有多個(gè)文件的程序,您可以指定程序的啟動文件。例如:

"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時(shí),在調(diào)試程序的第一行中斷開調(diào)試器。如果省略(默認(rèn))或設(shè)置為false,則調(diào)試器將程序運(yùn)行到第一個(gè)斷點(diǎn)。

console

指定如何顯示程序輸出。

顯示輸出的地方
"none"VS代碼調(diào)試控制臺
"integratedTerminal" (默認(rèn))VS代碼集成終端
"externalTerminal"獨(dú)立控制臺窗口

cwd

指定調(diào)試器的當(dāng)前工作目錄,它是代碼中使用的任何相對路徑的基礎(chǔ)文件夾。如果省略,默認(rèn)為${workspaceFolder}(在VS代碼中打開的文件夾)。

作為一個(gè)例子,說${workspaceFolder}包含一個(gè)py_code文件夾包含app.py,和一個(gè)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}/datasalaries.csv

debugOptions

一系列可能包含以下內(nèi)容的附加選項(xiàng):

選項(xiàng)描述
"RedirectOutput"(默認(rèn))使調(diào)試器將程序的所有輸出打印到VS Code調(diào)試輸出窗口中。如果省略此設(shè)置,則所有程序輸出不顯示在調(diào)試器輸出窗口中。該選項(xiàng)在使用時(shí)通常會被省略,"console": "integratedTerminal"或者"console": "externalTerminal"因?yàn)椴恍枰谡{(diào)試控制臺中復(fù)制輸出。
"DebugStdLib"啟用標(biāo)準(zhǔn)庫函數(shù)的調(diào)試。
"Django"激活特定于Django Web框架的調(diào)試功能。
"Sudo"與...一起使用時(shí)"console": "externalTerminal",允許調(diào)試需要提升的應(yīng)用程序。捕獲密碼需要使用外部控制臺。
"Pyramid"在調(diào)試金字塔應(yīng)用程序時(shí)使用。

env

為除調(diào)試器始終繼承的系統(tǒng)環(huán)境變量之外的調(diào)試器進(jìn)程設(shè)置可選的環(huán)境變量。

envFile

包含環(huán)境變量定義的文件的可選路徑。請參閱配置Python環(huán)境 - 環(huán)境變量定義文件。

調(diào)試特定的應(yīng)用程序類型

配置下拉菜單為常規(guī)應(yīng)用程序類型提供了各種不同的選項(xiàng):

組態(tài)描述
PySpark使用PySpark而不是默認(rèn)解釋器運(yùn)行程序,使用pythonPath前面在pythonPath選項(xiàng)下顯示的特定于平臺的值。
Python模塊替換program設(shè)置"module": "module.name"以調(diào)試特定模塊。使用此配置時(shí),請將該值替換為所需的模塊名稱。
集成終端/控制臺"console": "integratedTerminal"選項(xiàng)添加到標(biāo)準(zhǔn)配置。
外部終端/控制臺"console": "externalTerminal"選項(xiàng)添加到標(biāo)準(zhǔn)配置。
Django的指定"program": "${workspaceFolder}/manage.py""args": ["runserver", "--noreload", "--nothreading"]添加“Django”和“RedirectOutput” debugOptions。請注意,在調(diào)試時(shí)不能自動重新加載Django應(yīng)用程序。要調(diào)試Django HTML模板,請?zhí)砑訑帱c(diǎn)templates。
燒瓶請參閱下面的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"選項(xiàng)并添加"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)用程序,請?jiān)谥惺褂?code>"console": "externalTerminal"并包含“Sudo” debugOptions

燒瓶調(diào)試

{
    "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"
    ]
},

正如你所看到的,這個(gè)配置指定"stopOnEntry": false,"env": {"FLASK_APP": "${workspaceFolder}/app.py"}"args": ["run", "--no-debugger","--no-reload"]。該"module": "flask"屬性被用來代替program。

遠(yuǎn)程調(diào)試

遠(yuǎn)程調(diào)試允許您在VS代碼本地執(zhí)行一個(gè)程序,同時(shí)在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行它。在這種情況下,必須在兩臺計(jì)算機(jī)上都有源代碼。

  1. 在開發(fā)和遠(yuǎn)程計(jì)算機(jī)上,安裝ptvsd 3.0.0(3.0.0 完全版本- 更高版本尚不支持#514)。

  2. 在兩臺計(jì)算機(jī)的源代碼中,添加以下行,用適當(dāng)?shù)拿艽a替換_my_secret_以驗(yàn)證遠(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()


  3. 僅在遠(yuǎn)程計(jì)算機(jī)上,取消注釋上面的最后一行。您希望在開發(fā)機(jī)器上保留注釋行,以確保兩臺機(jī)器上的源代碼與行符合。

  4. 啟動遠(yuǎn)程程序。

  5. 選擇附加(遠(yuǎn)程調(diào)試)(下面)配置,然后修改remoteRoot為指向該程序的遠(yuǎn)程計(jì)算機(jī)上的位置,并修改hostport以及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)試

視窗:

  1. 使用sshd_config或類似命令在遠(yuǎn)程計(jì)算機(jī)上啟用ssh端口轉(zhuǎn)發(fā)。

  2. 建立一個(gè)PuTTY SSH隧道:

    1. 閱讀使用PuTTY設(shè)置SSH隧道(直到“打開會話”部分)。

    2. 在“隧道”屏幕上,使用本地模式,源端口(本地計(jì)算機(jī)上的入口點(diǎn)端口)可能與目標(biāo)端口(服務(wù)器上的端點(diǎn))不同。

    3. 目標(biāo)地址應(yīng)該是本地主機(jī)或127.0.0.1地址(這是遠(yuǎn)程SSH服務(wù)器用于建立隧道的地址)。

Linux的:

  1. 跑 ssh -L sourceport:localhost:destinationport user@remoteaddress

接下來,驗(yàn)證您可以在SSH會話中看到提示。然后打開VS Code并將端口配置為顯示在Tunnels屏幕上的調(diào)試端口。

最后,啟動程序并按照上一節(jié)所述附加調(diào)試器。

Google App Engine調(diào)試

Google App Engine自己啟動一個(gè)應(yīng)用程序,因此在VS Code調(diào)試器中啟動它不是直接可能的。相反,我們需要在應(yīng)用中使用ptvsd,然后以允許VS Code附加其調(diào)試器的模式啟動Google App Engine。

怎么用VScode代碼調(diào)試Python

  1. 下載ptvsd并將其文件解壓縮到工作文件夾中的ptvsd文件夾中。(如果使用不同的文件夾,請修改pydev_startup.py步驟4中創(chuàng)建的文件中的路徑)。

  2. tasks.json使用以下內(nèi)容創(chuàng)建一個(gè)文件:

    {
        "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"
                ]
            }
        ]
    }


  3. 在Windows和Linux上,將第一項(xiàng)內(nèi)容替換args為安裝Google App Engine的路徑(上面的源代碼中顯示的路徑適用于MacOS)。

  4. 在您的項(xiàng)目根目錄下創(chuàng)建一個(gè)名為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")


  5. launch.json使用Attach(遠(yuǎn)程調(diào)試)配置作為模板創(chuàng)建配置。確保秘密和端口值與上面源代碼中的內(nèi)容匹配。

  6. 添加"preLaunchTask": "python"launch.json

  7. 從命令面板中,運(yùn)行“ 運(yùn)行構(gòu)建任務(wù)”命令。這將打開任務(wù)輸出窗口,您可以在其中看到各種消息。

  8. 一旦看到消息“Google App Engine已啟動,準(zhǔn)備好連接調(diào)試器”,請使用遠(yuǎn)程調(diào)試配置啟動VS Code調(diào)試器。

  9. 在需要的地方設(shè)置斷點(diǎn),然后啟動瀏覽器以啟動應(yīng)用程序。

故障排除

調(diào)試器可能無法正常工作的原因很多。調(diào)試控制臺經(jīng)常會顯示具體原因,但有兩個(gè)具體原因如下:

  • 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é)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI