python - 代码中有eventlet.monkey_patch()不能远程调试?

标签 python pycharm pydev eventlet openstack-neutron

我正尝试在 python 代码上使用 PyCharm+Pydevd 进行远程调试。

我尝试远程调试的代码如下:

#!/usr/bin/python
import eventlet
eventlet.monkey_patch()

def main():
    import pydevd
    pydevd.settrace('10.84.101.215', port=11111, stdoutToServer=True, stderrToServer=True)
    print "Done"

if __name__ == '__main__':
    main()

请注意,如果我注释行

eventlet.monkey_patch()

远程调试将起作用。如果我将行更改为

eventlet.monkey_patch(os=False, thread=False)

远程调试也可以。

但我不能这样做,因为这会破坏一些其他逻辑。(我正在尝试远程调试 openstack neutron。以上代码只是描述我的问题的示例)

此外,我在谷歌搜索此问题后做了一些事情,尽管它们没有解决我的问题,但我会把它们粘贴在这里。

1. In PyCharm do below setting

setting -> Build,Extension,Deployment -> Python Debug -> Gevent Compatible (Check)

2. In PyCharm do below change

Edit the file 
C:\Program Files (x86)\JetBrains\PyCharm 2016.1.4\helpers\pydev_pydevd_bundle\pydevd_constants.py

Replace SUPPORT_GEVENT=False to SUPPORT_GEVENT=True

我知道这是 PyCharm 问题或 Pydevd 问题。我已经在 PyCharm 社区中发布了这个,但还没有得到回复。所以我想我可以在这里试试。知道的请给点建议。

最佳答案

不能帮助 Pydevd,但 Eventlet 中有交互式解释器后门,它允许您连接并执行任何代码以分析系统状态。

eventlet.monkey_patch()
# add one line
eventlet.spawn(backdoor.backdoor_server, eventlet.listen(('localhost', 3000)))

连接您最喜欢的 telnet 客户端。

http://eventlet.net/doc/modules/backdoor.html

此外,导入 ipdb ; ipdb.set_trace() 一直为我创造奇迹。

关于python - 代码中有eventlet.monkey_patch()不能远程调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38448305/

相关文章:

google-app-engine - 无法在 Google App Engine 中调试 dev_appserver

python - 无法导入Python包

eclipse - 使用 PyDev 在 Eclipse 4.3.2 上编辑 html 时出现意外的虚线

python - 没有命名模块(导入错误 Python 2.7)

python - 如何找到直线和轮廓之间的交点

python - 如何在 PyCharm 4.5.3 中*仅*修改 git 提交消息?

python - 运行以退出代码 -1 结束的 Pycharm 调试

python - 是否有一个模块可以记录内存中的错误?

Python - Pandas 根据用户操作终止 `read_sql`

python - 在 PyCharm 中更改文件类型