分享

远程debug调试(eclipse)之openstack windows

breaking 发表于 2015-11-19 13:11:23 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 11797
本帖最后由 breaking 于 2015-11-19 14:01 编辑

问题导读:

1.了解Eclipse怎么安装插件
2.怎么去设置Eclipse
3.怎么去调试openstack





clipboard.png



clipboard (1).png


http://pydev.org/updates


clipboard (2).png
clipboard (5).png



clipboard (3).png

clipboard (4).png



clipboard (6).png
http://www.pydev.org/manual_adv_remote_debugger.html

clipboard (7).png






clipboard (8).png






源调试代码中加入远程debug代码:


1、将安装有pydev插件的eclipse的文件夹搜索到pydevd.py文件,复制到目标主机的python路径下。
eclipse/plugins/org.python.pydev_x.x.x/pysrc/pydevd.py


clipboard.png
clipboard (1).png

clipboard (2).png

clipboard (8).png

clipboard (3).png

vim /usr/lib/python2.7/site-packages/pysrc.pth
clipboard (4).png

测试import pydevd
clipboard (5).png


vim /usr/lib/python2.7/site-packages/nova/compute/api.py
clipboard (9).png

此处发现eclipse并没有进入到get_all 断点调试的代码处,而是保存没有改pid进程,这是因为nova底层代码使用的eventlet多线程(协程)导致,解决此问题参考如下:

grep -rn 'eventlet.monkey_patch' /usr/lib/python2.6/site-packages/nova

29E18D47D050.png

vim /usr/lib/python2.6/site-packages/nova/cmd/__init__.py

[mw_shl_code=python,true]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)[/mw_shl_code]
替换为:
[mw_shl_code=python,true]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)[/mw_shl_code]
注:由于上述步骤中,将多线程关闭了,所以之后如果涉及到多线程协作流程(例如一次性创建多个虚拟机),将可能出现错误。


在控制节点执行:nova list 则会自动远程debug到eclipse中:

clipboard (21).png




clipboard (7).png


配置windows下的python2.7:
下载2.7版本的windows版本安装:https://www.python.org/downloads/release/python-2710/


如果上述情况大家调试不通,建议先使用一个简单的test文件来测试好远程debug,再来调试nova的上述代码:

vim test_eclipse_pydevd.py
[mw_shl_code=python,true]
print "I'm test eclipse remote debug python start"
import pydevd
pydevd.settrace(host='192.168.1.18', port=5678, stdoutToServer=True, stderrToServer=True)
a = 3
b = 4
c = a + b
print "I'm test eclipse remote debug python end!!!"[/mw_shl_code]

clipboard (10).png

clipboard (11).png


clipboard (6).png

原文链接:http://blog.csdn.net/tantexian/article/details/47003385









没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条