vscode无法调试python_用VScode代码调试Python

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命名的父对象中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程序的参数,例如:

"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代码本地执行一个程序,同时在远程计算机上执行它。在这种情况下,必须在两台计算机上都有源代码。

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

在两台计算机的源代码中,添加以下行,用适当的密码替换_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()

仅在远程计算机上,取消注释上面的最后一行。您希望在开发机器上保留注释行,以确保两台机器上的源代码与行符合。

启动远程程序。

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

{

"name": "Attach (Remote Debug)",

"type": "python",

"request": "attach",

"localRoot": "${workspaceFolder}",

"remoteRoot": "${workspaceFolder}",

"port": 3000,

"secret": "my_secret",

"host": "localhost"

}

通过SSH进行调试

视窗:

使用sshd_config或类似命令在远程计算机上启用ssh端口转发。

建立一个PuTTY SSH隧道:阅读使用PuTTY设置SSH隧道(直到“打开会话”部分)。

在“隧道”屏幕上,使用本地模式,源端口(本地计算机上的入口点端口)可能与目标端口(服务器上的端点)不同。

目标地址应该是本地主机或127.0.0.1地址(这是远程SSH服务器用于建立隧道的地址)。

Linux的:

跑 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。

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

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"

]

}

]

}

在Windows和Linux上,将第一项内容替换args为安装Google App Engine的路径(上面的源代码中显示的路径适用于MacOS)。

在您的项目根目录下创建一个名为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")

launch.json使用Attach(远程调试)配置作为模板创建配置。确保秘密和端口值与上面源代码中的内容匹配。

添加"preLaunchTask": "python"到launch.json。

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

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

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

故障排除

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值