我正在尝试使用 PyCharm+Pydevd 对 python 代码进行远程调试。
我尝试远程调试的代码如下:
#!/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
此外,
import ipdb ; ipdb.set_trace()
一直为我创造奇迹。关于python - 如果代码中有 eventlet.monkey_patch() 不能远程调试吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38448305/