PyCharm调试器在短暂的空闲时间后与远程主机断开连接

时间:2018-01-17 22:13:07

标签: django debugging pycharm pydev

我多年来一直在使用PyDev / PyCharm调试器的远程调试功能,它的工作正常。我已经将它用于基于Django的项目,该项目在过去一年左右在Docker容器中运行,并且它也能正常工作。

但是从几个月前开始(可能是由于我的代码商店转而使用Python 3?),我对此一直感到沮丧,因为调试器无缘无故地断开连接。我将处于调试会话的中间,但是如果我让系统闲置大约一分钟,那么调试会话会突然死亡,请求的执行将在没有我的情况下继续执行

当发生这种情况时,我会看到控制台输出更改为:

Connected to pydev debugger (build 173.3942.36)

要:

Connected to pydev debugger (build 173.3942.36)
Waiting for process connection...

一旦发生这种情况,让调试器重新连接到我的容器内正在运行的Django服务器的唯一解决方案是重新启动gunicorn,通过编辑文件以使gunicorn自行重新加载,或者通过{{重新启动gunicorn应用程序1}}。除非我这样做,否则针对服务器的进一步请求不会触发任何断点。

此外,一旦发生这种情况,进一步的调试会导致数十行这样的行出现在我的容器的日志中,只要我点击"恢复程序":

kill -HUP

唯一让这种情况发生的事情就是重新启动PyCharm调试器(这需要重新启动gunicorn,因为我已经停留在"等待进程连接......")。

也许我的container-name | Could not find thread pid_81_id_140102606217792 container-name | Available: ['pid_232_id_140052765045312', 'pid_232_id_140052676863480', 'pid_232_id_140052644157928', 'pid_232_id_140052644157200', 'pid_232_id_140052660987328', 'pid_232_id_140052643054984'] container-name | Could not find thread pid_81_id_140102606217792 container-name | Available: ['pid_240_id_140052765045312', 'pid_240_id_140052676863480', 'pid_240_id_140052643056888', 'pid_240_id_140052644157200', 'pid_240_id_140052660987328', 'pid_240_id_140052643054984'] container-name | Could not find thread pid_52_id_140052676829080 container-name | Available: ['pid_240_id_140052765045312', 'pid_240_id_140052676863480', 'pid_240_id_140052643056888', 'pid_240_id_140052644157200', 'pid_240_id_140052660987328', 'pid_240_id_140052643054984'] container-name | Could not find thread pid_232_id_140052765045312 container-name | Available: ['pid_240_id_140052765045312', 'pid_240_id_140052676863480', 'pid_240_id_140052643056888', 'pid_240_id_140052644157200', 'pid_240_id_140052660987328', 'pid_240_id_140052643054984'] container-name | Could not find thread pid_223_id_140052714764496 container-name | Available: ['pid_240_id_140052765045312', 'pid_240_id_140052676863480', 'pid_240_id_140052643056888', 'pid_240_id_140052644157200', 'pid_240_id_140052660987328', 'pid_240_id_140052643054984'] 在一个不好的地方?它在我的wsgi.py中:

pydevd.settrace()

我应该这样做吗?

编辑:它比我意识到的还要糟糕。在看到#34;连接到pydev调试器(build 173.4301.16)"之后,让系统闲置40秒,无论调试器是否实际遇到断点,连接都会消失并返回到&#34 ;等待流程连接......"

1 个答案:

答案 0 :(得分:1)

我完全通过意外发现了解这个问题的根源。事实证明,Docker for Mac开发人员在最近的边缘构建中出现了配置错误。他们将其修复为今天刚刚发布的最新版本。当我检查更改日志时,我注意到一个错误修正,这让我想到了嗯,这可能是这个调试器超时问题的根源......"事实上,安装新版本确实解决了这个问题。

发生的事情是他们在Docker for Mac中使用的vpnkit软件被错误配置为在30秒的空闲时间后终止TCP连接。该修复程序将该数字推回到300秒,这在您进行调试时更可忍受超时。

我已经离开了这个问题并回答了,以防万一其他人遇到这个问题。解决此问题的Docker for Mac版本是18.01.0-ce-mac48(22004),目前可在Edge频道上使用。