pserve在VSCode python调试器中启动后立即退出
我有一个python-2.7 env Pyramid 1.4应用程序,我一直在OSX上开发(截至本文撰写时为10.14.5)。一旦env被激活,我就可以从命令行启动pserve并测试应用程序。我希望能够在VSCode中进行调试。我已经在pserve在VSCode python调试器中启动后立即退出,python,python-2.7,visual-studio-code,pyramid,Python,Python 2.7,Visual Studio Code,Pyramid,我有一个python-2.7 env Pyramid 1.4应用程序,我一直在OSX上开发(截至本文撰写时为10.14.5)。一旦env被激活,我就可以从命令行启动pserve并测试应用程序。我希望能够在VSCode中进行调试。我已经在launch.json中使用金字塔设置配置了调试器: { "name": "Python: Pyramid Application", "type": "python", "r
launch.json
中使用金字塔设置配置了调试器:
{
"name": "Python: Pyramid Application",
"type": "python",
"request": "launch",
"args": [
"${workspaceFolder}/development.ini"
],
"pyramid": true,
"jinja": true
}
每当我从VSCode(F5)中启动调试器时,所有预期命令都会运行,并且它们看起来是合法的:
$ source /my/app/path/env/bin/activate
$ cd /my/app/path ; env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 /my/app/path/env/bin/python /my/home/.vscode/extensions/ms-python.python-2019.4.12954/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 63836 /my/app/path/env/lib/python2.7/site-packages/pyramid-1.4-py2.7.egg/pyramid/scripts/pserve.py /my/app/path/development.ini
没有错误,但launcher命令退出,调试器从未激活。pserve未在后台运行。调试工具栏会短暂出现在编辑器窗口的顶部,但不到一秒钟就会消失(因此我认为会有一个简短的调试会话因某种原因而结束)
我已尝试更改development.ini中的选项,以使用不同的金字塔服务器主机
[server:main]
; use = egg:waitress#main
use = egg:pyramid#wsgiref
host = 0.0.0.0
port = 6666
没有区别
关于VSCode python页面的信息很少
我可以将代码添加到需要调试的文件中(我的备用方法是pdb
),但我很想利用VSCode中的出色调试器
请注意,如果我手动(而不是按F5)输入
在终端中-我得到一个socket.error:[Errno 61]连接被拒绝
,我想是因为VSCode的调试器已经关闭了
如果在同一VSCode终端窗口中运行以下命令
/my/app/path/env/lib/python2.7/site-packages/pyramid-1.4-py2.7.egg/pyramid/scripts/pserve.py /my/app/path/development.ini
我的服务器启动正常,并提供请求。所以这似乎与ptvsd发射器有关
有什么想法吗?我想出的解决方案(有效)是将
launch.json中的金字塔设置更改为如下所示:
{
"name": "Python: Pyramid Application",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/env/bin/pserve",
"args": [
"${workspaceFolder}/development.ini"
],
// "pyramid": true
// "jinja": true
"debugOptions": [
"RedirectOutput",
]
}
基本上,我是通过手动设置强制调试器启动pserve。这是可行的,我可以点击断点并查看变量值。写下这篇文章后,我立即意识到,我运行应用程序的方式与调试器启动应用程序的方式存在细微的差异。调试器开始直接使用pserve.py
脚本,但我的应用程序运行的方式使用pserve
,它本身就是一个python脚本,包装并配置pserve.py
,因此问题与VSCode的调试器无关,而与调试器配置有关。我认为问题与以下方面有关:
{
"name": "Python: Pyramid Application",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/env/bin/pserve",
"args": [
"${workspaceFolder}/development.ini"
],
// "pyramid": true
// "jinja": true
"debugOptions": [
"RedirectOutput",
]
}