VS Code Python 调试器无法连接到 运行 进程(超时)
VS Code Python debugger won't connect to running process (timeout)
在我的笔记本电脑上,我可以将 VS Code 调试器附加到 运行 python 进程,但在我的台式机上,它总是尝试连接超时。
- 笔记本电脑:Debian 稳定版 (11),python 3.9
- 台式机:Pop OS (Ubuntu 21.10),python 3.9.7
- 我已登录 Github 帐户,因此 VS Code 设置和扩展已同步。
我正在使用这个简单的测试文件:
import time
while True:
print("hello, world")
time.sleep(1)
当我从(默认)launch.json:
启动脚本时,调试工作正常
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true
}
]
}
但是当我使用以下(也是默认的)launch.json 附加到我已经 运行 的进程时,我总是结束 op 收到超时消息(在桌面上,相同的脚本确实有效在笔记本电脑上):
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Attach using Process Id",
"type": "python",
"request": "attach",
"processId": "${command:pickProcess}",
"justMyCode": true
}
]
}
启用 logToFile
并比较我的笔记本电脑和台式机之间的日志没有显示任何差异,除了发生超时和使用的端口(我的笔记本电脑上的端口 33191
,35205
在我的桌面上,都使用 127.0.0.1
作为主机)。将此端口放入我的配置中不起作用,但我也不完全确定此端口号来自何处以及调试器如何将自身注入到进程中。
调试器似乎可以找到该进程(我可以 select 从下拉列表中找到它)但不知何故无法实际连接到它。有谁知道可能出了什么问题,或者有什么建议可以指出我正确的方向?我已经尝试了其他帖子中的一些建议,但它们并没有奏效(大部分已过时或 运行 当前文件而不是附加到现有进程)。
深入挖掘我发现有多个日志文件,其中一个有关于 ptrace_scope
的错误(我从未听说过)。
简单的说/proc/sys/kernel/yama/ptrace_scope
处文件的值决定了调试器可以访问什么样的进程。不同的值是:
- 0: 所有进程都可以调试,只要他们有相同的uid。
- 1:只能调试一个父进程
- 2: 只有管理员可以使用 ptrace
- 3: 无法使用 ptrace 跟踪任何进程。
(列表来自 here)
此文件在我的笔记本电脑上设置为 0
(附加有效)但在我的台式机上它设置为 1
,因此我将此值更新为 0
现在调试按预期工作。
echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope
编辑:
我在 VSCode 回购中遇到了这个问题:
在我的笔记本电脑上,我可以将 VS Code 调试器附加到 运行 python 进程,但在我的台式机上,它总是尝试连接超时。
- 笔记本电脑:Debian 稳定版 (11),python 3.9
- 台式机:Pop OS (Ubuntu 21.10),python 3.9.7
- 我已登录 Github 帐户,因此 VS Code 设置和扩展已同步。
我正在使用这个简单的测试文件:
import time
while True:
print("hello, world")
time.sleep(1)
当我从(默认)launch.json:
启动脚本时,调试工作正常{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true
}
]
}
但是当我使用以下(也是默认的)launch.json 附加到我已经 运行 的进程时,我总是结束 op 收到超时消息(在桌面上,相同的脚本确实有效在笔记本电脑上):
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Attach using Process Id",
"type": "python",
"request": "attach",
"processId": "${command:pickProcess}",
"justMyCode": true
}
]
}
启用 logToFile
并比较我的笔记本电脑和台式机之间的日志没有显示任何差异,除了发生超时和使用的端口(我的笔记本电脑上的端口 33191
,35205
在我的桌面上,都使用 127.0.0.1
作为主机)。将此端口放入我的配置中不起作用,但我也不完全确定此端口号来自何处以及调试器如何将自身注入到进程中。
调试器似乎可以找到该进程(我可以 select 从下拉列表中找到它)但不知何故无法实际连接到它。有谁知道可能出了什么问题,或者有什么建议可以指出我正确的方向?我已经尝试了其他帖子中的一些建议,但它们并没有奏效(大部分已过时或 运行 当前文件而不是附加到现有进程)。
深入挖掘我发现有多个日志文件,其中一个有关于 ptrace_scope
的错误(我从未听说过)。
简单的说/proc/sys/kernel/yama/ptrace_scope
处文件的值决定了调试器可以访问什么样的进程。不同的值是:
- 0: 所有进程都可以调试,只要他们有相同的uid。
- 1:只能调试一个父进程
- 2: 只有管理员可以使用 ptrace
- 3: 无法使用 ptrace 跟踪任何进程。
(列表来自 here)
此文件在我的笔记本电脑上设置为 0
(附加有效)但在我的台式机上它设置为 1
,因此我将此值更新为 0
现在调试按预期工作。
echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope
编辑: 我在 VSCode 回购中遇到了这个问题: