我有一个在Docker-compose配置中运行的Django应用程序,我希望能够从Pycharm进行交互式调试。我首先尝试并使用Pycharm的内置Docker Compose配置来设置调试失败(结果:该应用程序可以运行并且可以访问,但由于a known bug where the debugger fails to connect if the entrypoint script takes too long to return而无法进行调试)。我现在正尝试使用pydevd进行远程调试来设置调试,大致遵循instructions contained here并总结如下:
在我的Django应用程序中,将pycharm-debug-py3k.egg
复制到根目录,将其添加到路径,导入pydevd并在我的应用程序代码中将其初始化,如下所示:
import sys
sys.path.append("pycharm-debug-py3k.egg")
import pydevd
pydevd.settrace('ip.address.of.my.machine', port=4444)
在Pycharm中启动调试器
docker-compose up
启动我的应用程序其结果是,在Pycharm中,调试器控制台报告连接处于活动状态(“已连接到pydev调试器”)。调试器选项卡显示了在我添加了代码片段的文件中存在的预期变量和值。我的Django应用程序的容器日志中没有错误出现,并且该日志显示了正常Django启动的预期输出。但是,无法从Web浏览器访问我的应用程序,并且尝试在容器中运行单元测试时挂起,没有响应。键盘中断单元测试后,我在底部收到一条带有此消息的堆栈跟踪:
File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1392, in _locked_settrace
time.sleep(0.1) # busy wait until we receive run command
KeyboardInterrupt
我已删除所有断点,删除了.idea
,重新启动了Pycharm,重新启动了Docker,并确认如果我删除了pydevd
代码段,则所有单元测试和Web服务器将按预期运行。
答案 0 :(得分:0)
发布后,我便立即找到答案-我将代码段添加到了错误的文件中。当我将其添加到我的根应用程序的__init__.py
并重新启动调试服务器后,它便按预期工作,打破了我在Pycharm中标记断点的位置(至少当使用Web浏览器进行访问时,仍然无法正常运行)测试)。