在VS Code中使用Python和节点进程调试应用程序

时间:2018-10-13 00:55:48

标签: python node.js visual-studio-code

我最近选择了VS Code,因为我有一个用NodeJS编写的新组件,我需要对其进行调试,并且了解到VS Code内置了调试支持。我可以在PyCharm for Python中进行调试,但是PyCharm的社区版没有JS支持,因此我想将环境迁移到VSC。

我正在使用的应用程序主要在Python上运行,并且我们添加了一个新组件,该组件在NodeJS的单独端口上运行。我已经设置好配置以启动主应用程序,该应用程序启动了Python和NodeJS服务器。

现在,当我在NodeJS和Python代码中设置断点时,我想将其设置为在断点处暂停。我以为可以使用"request": "attach"进行配置,但是当我将端口与应用程序的端口匹配时,我只会得到一个错误(Failed to attach (connect ECONNREFUSED 127.0.0.1:8888))。我知道这可能是因为端口目前尚未运行我的应用程序,但是当我自己单独运行附加配置时,我会收到有关进程如何意外终止的通知。

所以我在这里,我不知道我需要做些什么来使我的断点停止,以便我可以逐步完成Python和NodeJS代码。

这是我的launch.json文件。 Python进程在端口8888上运行,而NodeJS进程在端口8895上运行。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "CloudDrafts",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/obrien.server/project/apps/obrien/runner.py",
            "args": ["-d", "${workspaceFolder}/obrien.server/_data"],
            "console": "externalTerminal",
            "pythonPath": "${workspaceFolder}/venv/bin/python2.7",
            "cwd": "${workspaceFolder}/obrien.server/project/apps/obrien",
            "env": {
                "PYTHONPATH": "${workspaceFolder}/obrien.server/project"
            }
        },
        {
            "name": "Attach (Python)",
            "type": "python",
            "request": "attach",
            "port": 8888,
            "host": "localhost"
        },
        {
            "name": "Attach (Node.js)",
            "type": "node",
            "request": "attach",
            "port": 8895,
            "address": "localhost"
        }
    ],
    "compounds": [
        {
            "name": "Debug CloudDrafts",
            "configurations": ["CloudDrafts", "Attach (Python)", "Attach (Node.js)"]
        }
    ]
}

为澄清起见,我已经安装了Python扩展,并且已经浏览了尽可能多的Microsoft文档,但是现在我并没有真正理解它,也没有运气找到所需的东西。

必须设置什么才能设置VS Code,以允许在单独的端口中运行Python和NodeJS进程的应用程序进行断点调试?

1 个答案:

答案 0 :(得分:0)

Python扩展程序的调试器仅用于调试两端的Python代码,因此在attach场景中看到的错误是因为它试图在ptvsd调试器中查找另一个实例另一端,只能找到Node。如果您更改为按模块或文件进行调试,则Python调试将再次起作用。

然后附加到活动的Node进程以调试另一端,我不确定该怎么做。

相关问题