openstack windows下远程debug调试(pycharm)

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客:blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。


环境:windows7、pycharm3.4.1、centos6.5(部署openstack icehource版)

1、在windows机器安装pycharm
将windows pycharm安装目录下的pycharm-debug.egg拷贝到centos机器(如果centos的python为3版本以上,则拷贝pycharm-debug-py3k.egg):
openstack windows下远程debug调试(pycharm)_第1张图片
在centos6.5安装debug egg:
easy_install pycharm-debug.egg

openstack windows下远程debug调试(pycharm)_第2张图片

2、配置windows pycharm的远程调试配置(Run -> Edit configurations...):
openstack windows下远程debug调试(pycharm)_第3张图片
openstack windows下远程debug调试(pycharm)_第4张图片
注:其中Local host name为:windows本机当前ip地址。port为:当前pycharm用来监听远程debug连接的端口。(其中path mapping可以先不用设置)


3、pycharm启动远程debug监听远程调试:
点击右上角出现的刚刚配置的debug:
openstack windows下远程debug调试(pycharm)_第5张图片

下面窗口将出现:
openstack windows下远程debug调试(pycharm)_第6张图片
 
     

4、将Waiting for connection...上面的两句代码copy到对应断点调试代码中:
 
     
import pydevd
pydevd.settrace('192.168.1.133', port=51234, stdoutToServer=True, stderrToServer=True)
接下来以nova的get_all实例为例调试:
 
     
vim /usr/lib/python2.6/site-packages/nova/compute/api.py 
添加上述内容后api代码如下: openstack windows下远程debug调试(pycharm)_第7张图片
5、重启nova服务nova-api、nova-compute,执行:nova list命令,或者dashboard点击获取instance的页签:
 
     
远程debug连接到pycharm,进入了调试模式。
 
     
6、此处发现pycharm并没有进入到get_all 断点调试的代码处,而是进入了thread.py的线程文件,这是因为nova底层代码
使用的eventlet多线程(协程)导致,解决此问题参考如下:
 
     
grep -rn 'eventlet.monkey_patch'  /usr/lib/python2.6/site-packages/nova
 
     
 
     
vim /usr/lib/python2.6/site-packages/nova/cmd/__init__.py

import eventlet
from nova import debugger
if debugger.enabled():
    # turn off thread patching to enable the remote debugger
    eventlet.monkey_patch(os=False, thread=False)
else:
    eventlet.monkey_patch(os=False)
替换为:
import eventlet
from nova import debugger

if debugger.enabled():
    # turn off thread patching to enable the remote debugger
    eventlet.monkey_patch(os=False, thread=False)
else:
    eventlet.monkey_patch(os=False, thread=False)
注:由于上述步骤中,将多线程关闭了,所以之后如果涉及到多线程协作流程(例如一次性创建多个虚拟机),将可能出现错误。


 
     
openstack windows下远程debug调试(pycharm)_第8张图片
安装之前步骤,重启服务nova-api、nova-compute,nova list 即可以看到正常的调试代码:
openstack windows下远程debug调试(pycharm)_第9张图片
补充:pycharm可以将本机代码和远程代码进行映射(Edit Path Mapping),就不用每次去远程下载远程:
openstack windows下远程debug调试(pycharm)_第10张图片
补充、如果还是不能正常调试,请将pycharm安装文件内容替换:
openstack windows下远程debug调试(pycharm)_第11张图片
openstack windows下远程debug调试(pycharm)_第12张图片
将:
SUPPORT_GEVENT = os.getenv('GEVENT_SUPPORT', 'False') == 'True'
替换为:
SUPPORT_GEVENT = True

openstack windows下远程debug调试(pycharm)_第13张图片


 
  

你可能感兴趣的:(openstack windows下远程debug调试(pycharm))