Python扩展支持许多类型的Python应用程序的调试,包括以下一般功能:

  • 观看窗口
  • 评估表达式
  • 当地人
  • 参数
  • 扩大孩子
  • 断点
  • 条件断点
  • 暂停(进入)正在运行的程序
  • 自定义启动目录

要熟悉这些常规功能,请查看VS Code调试文章。本文仅讨论那些特定于Python的注意事项。

选择一个配置

要选择调试配置,请选择边栏中的调试视图,然后从下拉列表中选择一个选项:

在调试时,状态栏显示左下角的当前配置,当前的调试解释器位于右侧。选择配置会显示列表,您可以从中选择不同的配置:

默认情况下,调试器使用与python.pythonPathVS Code其他功能相同的设置。要使用不同的解释器,请pythonPath在调试器设置中设置该值。或者,在状态栏上选择指定的解释器以选择不同的解释器。

注:调试器设置不支持相对路径,包括依赖主python.pythonPath设置时。要解决此问题,请使用环境变量,或者创建一个变量,例如${workspaceFolder}解析到您的项目文件夹,然后在该路径中使用该变量,如in "python.pythonPath": "${workspaceFolder}/venv/bin/python"

要查看所有配置,请launch.json通过选择配置下拉列表旁边的齿轮图标打开:

下一节将介绍默认或标准的“Python:当前文件”配置。本文还介绍了调试特定应用程序类型下的其他配置。

注意:如果您想尝试新的实验性调试器,请参阅Issue 538(GitHub)上的说明。

标准配置和选项

标准配置为launch.json

{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
}

以下各节介绍各种设置的自定义配置。

name

提供出现在VS Code下拉列表中的调试配置的名称。

type

标识要使用的调试器的类型; 将此设置留给pythonPython代码。

request

指定开始调试的模式:

  • launch:在中指定的文件上启动调试器 program
  • attach:将调试器附加到已经运行的进程。有关示例,请参阅远程调试

program

提供python程序入口模块的完全限定路径。推荐值为${file},它使用编辑器中的活动文件。但是,对于具有多个文件的程序,您可以指定程序的启动文件。例如:

"program": "/Users/Me/Projects/PokemonGo-Bot/pokemongo_bot/event_handlers/__init__.py",

您还可以依赖工作区根目录中的相对路径。例如,如果根是/Users/Me/Projects/PokemonGo-Bot那么你可以使用以下内容:

"program": "${workspaceFolder}/pokemongo_bot/event_handlers/__init__.py",

pythonPath

指向Python解释器用于调试目的。如果未指定,则默认为python.pythonPath设置中标识的解释器,这相当于使用该值${config:python.pythonPath}。要使用不同的解释器,请改为指定其路径。

您可以通过将指定特定于平台的路径pythonPath命名的父对象中osxwindows或者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程序的参数,例如:

"args": [
"--quiet", "--norepeat"
],

stopOnEntry

设置为true时,在调试程序的第一行中断开调试器。如果省略(默认)或设置为false,则调试器将程序运行到第一个断点。

console

指定如何显示程序输出。

显示输出的地方
"none" VS代码调试控制台
"integratedTerminal" (默认) VS代码集成终端
"externalTerminal" 独立控制台窗口

cwd

指定调试器的当前工作目录,它是代码中使用的任何相对路径的基础文件夹。如果省略,默认为${workspaceFolder}(在VS代码中打开的文件夹)。

作为一个例子,说${workspaceFolder}包含一个py_code文件夹包含app.py,和一个data文件夹包含salaries.csv。如果启动调试器py_code/app.py,则数据文件的相对路径根据以下值而变化cwd

CWD 数据文件的相对路径
省略或 ${workspaceFolder} data/salaries.csv
${workspaceFolder}/py_code ../data/salaries.csv
${workspaceFolder}/data salaries.csv

debugOptions

一系列可能包含以下内容的附加选项:

选项 描述
"RedirectOutput"(默认) 使调试器将程序的所有输出打印到VS Code调试输出窗口中。如果省略此设置,则所有程序输出不显示在调试器输出窗口中。该选项在使用时通常会被省略,"console": "integratedTerminal"或者"console": "externalTerminal"因为不需要在调试控制台中复制输出。
"DebugStdLib" 启用标准库函数的调试。
"Django" 激活特定于Django Web框架的调试功能。
"Sudo" 与...一起使用时"console": "externalTerminal",允许调试需要提升的应用程序。捕获密码需要使用外部控制台。
"Pyramid" 在调试金字塔应用程序时使用。

env

为除调试器始终继承的系统环境变量之外的调试器进程设置可选的环境变量。

envFile

包含环境变量定义的文件的可选路径。请参阅配置Python环境 - 环境变量定义文件

调试特定的应用程序类型

配置下拉菜单为常规应用程序类型提供了各种不同的选项:

组态 描述
PySpark 使用PySpark而不是默认解释器运行程序,使用pythonPath前面在pythonPath选项下显示的特定于平台的值。
Python模块 替换program设置"module": "module.name"以调试特定模块。使用此配置时,请将该值替换为所需的模块名称。
集成终端/控制台 "console": "integratedTerminal"选项添加到标准配置。
外部终端/控制台 "console": "externalTerminal"选项添加到标准配置。
Django的 指定"program": "${workspaceFolder}/manage.py""args": ["runserver", "--noreload", "--nothreading"]添加“Django”和“RedirectOutput” debugOptions。请注意,在调试时不能自动重新加载Django应用程序。要调试Django HTML模板,请添加断点templates
烧瓶 请参阅下面的Flask调试
金字塔 删除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"]
附加(远程调试) 请参阅以下远程调试

远程调试和Google App Engine还需要具体步骤。有关调试单元测试(包括nosetest)的详细信息,请参阅单元测试

要调试需要管理员权限的应用程序,请在中使用"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

远程调试

远程调试允许您在VS代码本地执行一个程序,同时在远程计算机上执行它。在这种情况下,必须在两台计算机上都有源代码。

  1. 在开发和远程计算机上,安装ptvsd 3.0.03.0.0 完全版本- 更高版本尚不支持#514)。

  2. 在两台计算机的源代码中,添加以下行,用适当的密码替换my_secret以验证远程调试,并用合适的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. 仅在远程计算机上,取消注释上面的最后一行。您希望在开发机器上保留注释行,以确保两台机器上的源代码与行符合。

  4. 启动远程程序。

  5. 选择附加(远程调试)(下面)配置,然后修改remoteRoot为指向该程序的远程计算机上的位置,并修改hostport以及secret在上面添加的源代码中的值匹配。

    {
    "name": "Attach (Remote Debug)",
    "type": "python",
    "request": "attach",
    "localRoot": "${workspaceFolder}",
    "remoteRoot": "${workspaceFolder}",
    "port": 3000,
    "secret": "my_secret",
    "host": "localhost"
    }

通过SSH进行调试

视窗:

  1. 使用sshd_config或类似命令在远程计算机上启用ssh端口转发。
  2. 建立一个PuTTY SSH隧道:
    1. 阅读使用PuTTY设置SSH隧道(直到“打开会话”部分)。
    2. 在“隧道”屏幕上,使用本地模式,源端口(本地计算机上的入口点端口)可能与目标端口(服务器上的端点)不同。
    3. 目标地址应该是本地主机或127.0.0.1地址(这是远程SSH服务器用于建立隧道的地址)。

Linux的:

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

接下来,验证您可以在SSH会话中看到提示。然后打开VS Code并将端口配置为显示在Tunnels屏幕上的调试端口。

最后,启动程序并按照上一节所述附加调试器。

Google App Engine调试

Google App Engine自己启动一个应用程序,因此在VS Code调试器中启动它不是直接可能的。相反,我们需要在应用中使用ptvsd,然后以允许VS Code附加其调试器的模式启动Google App Engine。

  1. 下载ptvsd并将其文件压缩到工作文件夹中的ptvsd文件夹中。(如果使用不同的文件夹,请修改pydev_startup.py步骤4中创建的文件中的路径)。

  2. tasks.json使用以下内容创建一个文件:

    {
    "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上,将第一项内容替换args为安装Google App Engine的路径(上面的源代码中显示的路径适用于MacOS)。

  4. 在您的项目根目录下创建一个名为pydev_startup.py的文件,其中包含以下内容,并按照说明修改:

    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(远程调试)配置作为模板创建配置。确保秘密和端口值与上面源代码中的内容匹配。

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

  7. 从命令面板中,运行“ 运行构建任务”命令。这将打开任务输出窗口,您可以在其中看到各种消息。

  8. 一旦看到消息“Google App Engine已启动,准备好连接调试器”,请使用远程调试配置启动VS Code调试器。

  9. 在需要的地方设置断点,然后启动浏览器以启动应用程序。

故障排除

调试器可能无法正常工作的原因很多。调试控制台经常会显示具体原因,但有两个具体原因如下:

  • python可执行文件的路径不正确:请检查pythonPath用户设置中的值。

  • 观察窗口中的表达式无效(请参阅下面的示例):清除Watch窗口中的所有表达式并重新启动调试器。

    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

下一步

  • Python环境 - 控制哪个Python解释器用于编辑和调试。
  • 单元测试 - 配置单元测试环境并发现,运行和调试测试。
  • 设置参考 - 探索VS Code中与Python相关的所有设置。
  • 一般调试 - 了解VS Code的调试功能。

用VScode代码调试Python的更多相关文章

  1. 如何在vscode中调试python scrapy爬虫

    本文环境为 Win10 64bit+VS Code+Python3.6,步骤简单罗列下,此方法可以不用单独建一个Py入口来调用命令行 安装Python,从官网下载,过程略,这里主要注意将python目 ...

  2. windows下使用vscode编写运行以及调试Python

    更新于2018年10月: 首先去python官网下载python3  地址:https://www.python.org/downloads/windows/ 下载好后直接安装 记得勾选添加环境变量 ...

  3. [置顶] 如何在Python IDLE中调试Python代码?

    好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...

  4. #7 Python代码调试

    前言 Python已经学了这么久了,你现在已经长大了,该学会自己调试代码了!相信大家在编写程序过程中会遇到大量的错误信息,我也不例外的啦-遇到这些问题该怎么解决呢?使用最多的方法就是使用print打印 ...

  5. Python - 调试Python代码的方法

    调试(debug) 将可疑环节的变量逐步打印出来,从而检查哪里是否有错. 让程序一部分一部分地运行起来.从核心功能开始,写一点,运行一点,再修改一点. 利用工具,例如一些IDE中的调试功能,提高调试效 ...

  6. 【转载】PDB命令行调试Python代码

    转载自这里. (博主按:PDB调试python代码和用GDB调试c++代码很类似) 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多.然而, ...

  7. linux系统下如何在vscode中调试C++代码

    本篇博客以一个简单的hello world程序,介绍在vscode中调试C++代码的配置过程. 1. 安装编译器 vscode是一个轻量的代码编辑器,并不具备代码编译功能,代码编译需要交给编译器完成. ...

  8. linux操作系统下调试python代码方法

    一.python有调试工具pdb,可以用来进行代码调试. pdb的常用命令说明: l #查看运行到哪行代码 n #单步运行,跳过函数 s #单步运行,可进入函数 p 变量 #查看变量值 b 行号 #断 ...

  9. 【转载】Python 代码调试技巧

    https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ Python 代码调试技巧 张 颖2012 年 5 月 03 日发布 ...

随机推荐

  1. UE4中Component和Subobject的区别

    Component是Subobject的一种. 其中, Subobject是一种Outer不是一个UPackage的UObject,而UPackage是整个层次结构中的最上层,指向磁盘上的一个.uas ...

  2. Ubuntu 18.04换国内源 中科大源 阿里源 163源 清华源

    感觉还是18.4好用,所以最近装回了18,感觉现在18的兼容性也还可以了,深度学习的环境配置都没有问题,就是安装软件的时候有点慢,所以想要更新一下源. 第一步: 编辑/etc/apt/sources. ...

  3. C++ vector 使用笔记

    map 插入 vector #include <string> #include <iostream> #include <algorithm> #include ...

  4. 【转】利用URLConnection来发送POST和GET请求

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...

  5. Mybatis进阶学习笔记——输出映射

    输出映射(例如一个方法的返回至使用什么类型去接收) 1.基本类型 <!-- 统计记录数 --> <select id="queryTotalCount" resu ...

  6. pl/sql Devloper 快捷键__新建sql窗口

    首先,打开PLSQL,菜单栏--->首选项----->键配置 其次,点击你要增加快捷键的选项,直接键盘上输入快捷键: 比如你要修改为CTRL+N,直接在键盘上按出CTRL+N即可. ESC ...

  7. 【网络编程2】网络编程基础-发送ICMP包(Ping程序)

    IP协议 网络地址和主机协议 位于网络层的协议,主要目的是使得网络能够互相通信,该协议使用逻辑地址跨网络通信,目前有两个版本IPV4,IPV6. 在IPV4协议中IP地址是一个32位的数备,采用点分四 ...

  8. openssl版本升级操作记录【转】

    需要部署nginx的https环境,之前是yum安装的openssl,版本比较低,如下:   [root@nginx ~]# yum install -y pcre pcre-devel openss ...

  9. (并发编程)全局解释器锁(GIL)-----有了GIL不用给线程加锁了?

    一.全局解释器锁 (GIL)运行test.py的流程:a.将python解释器的代码从硬盘读入内存b.将test.py的代码从硬盘读入内存  (一个进程内装有两份代码---一份cpython解释器代码 ...

  10. java工程添加类库

    在属性中添加自定义类库 在工程中引入自定义类库