远程调试openstack

      之前一直没有找到方法调试openstack的horizon代码,现在终于找到方法了,特别感谢下面这篇博客,讲解非常清晰:

http://blog.csdn.net/tantexian/article/details/38295599  但是其中有一个问题就是需要在源程序代码中添加代码以供调试用,这样调试完了还要去删除这些代码,十分不方便。所以我就想在此基础上做些改进,具体情况如下:

 

Komodo下载地址:http://pan.baidu.com/s/13i5Zk

PythonRemoteDebuggingClient下载地址:http://code.activestate.com/komodo/remotedebugging/

一、本地安装配置Komodo

1、Edit->Preferences:配置python解释器。

2、Debug-> Listen for debuging connections:确保勾选上,这样才能远程调试。

3、Debug->Listener Status:查看配置的远程连接端口。(Edit-> Preferences->Debugger->Connection:可以自定义远程连接端口)

 

二、远程服务器配置

解压PythonRemoteDebuggingClient并进入该目录!

cd pythonlib/dbgp

 1.

cp client.py client.py.bak
vim client.py

在头部添加:

import stat

在brk函数处进行修改: 

def brk(file=None,host = '10.10.24.96', port = 9000, idekey = '',
        preloadScript = None, logLevel = logging.WARN):
    filepath=os.path.abspath(file)
    tmp_file='/tmp/brk_file'
    if not os.path.exists(tmp_file):
        with open(tmp_file,'a') as f:
          f.write(filepath)
          f.write('\n')
        os.chmod(tmp_file,os.stat(tmp_file).st_mode|stat.S_IWGRP|stat.S_IWOTH)
    else:
        with open(tmp_file,'a') as f:
          f.write(filepath)
          f.write('\n')

 说明:这里设置/tmp/brk_file为临时记录文件,记录那些添加了断点设置代码的文件路径信息。10.10.24.96为Komodo所在的机器IP地址,非调试的代码所在地址。9000为调试设置的端口。

 2.

cp __init__.py __init__.py.bak
vim __init__.py 

在头部添加:

from dbgp.client import brk

  3.

cp -r pythonlib/dbgp /usr/lib/python2.6/site-packages/
cp pydbgp /usr/bin/
chmod a+x /usr/bin/pydbgp

 

三、设置删除断点程序

1.

vim brk-clean

添加如下内容:

#!/usr/bin/python
import subprocess
import os
import sys

def delete_brk(file):
    cmd="sed -i "+r"'/import dbgp/d' "+file+";"
    cmd=cmd+"sed -i "+r"'/dbgp.brk(__file__)/d' "+file
    proc=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    out,err=proc.communicate()
    if proc.returncode:
        raise RuntimeError('Failed:\n%s' % err)


def main():

    result=True
    #if tmp file not exist or is not a file
    if not os.path.exists('/tmp/brk_file') or not os.path.isfile('/tmp/brk_file'):
        print "/tmp/brk_file doesn't exist!\nCheck if it has been deleted Or you didn't set any breakpoint !"
        result=False
        return result

    #find files with brk
    file_list=[]
    with open('/tmp/brk_file','r') as f:
        file_list=f.readlines()
        try:
            os.remove('/tmp/brk_file')
        except:
            print r"Error:Can't delete /tmp/brk_file!"
            result=False


    for file in file_list:
        file=file.rstrip('\n')
        if os.path.exists(file) and os.path.isfile(file):
            delete_brk(file)
            print 'Deleted brk in file: '+file+r"!"
        else:
            print 'Error:'+file+r"doesn't exist or isn't a file"
            result=False

    return result

    
if __name__=='__main__':
    #delete the brk in a file
    if len(sys.argv)>1:
        file=sys.argv[1]
        if not os.path.exists(file) or not os.path.isfile(file):
            print file+r" doesn't exist!"
            sys.exit()
        delete_brk(file)
        print "Breakpoints in "+file+" have been cleaned up !"
        sys.exit()
        
    result=main()
    if result:
        print 'Brk-Clean Completed !'

 2.

mv brk-clean /usr/bin
chmod a+x /usr/bin/brk-clean

 

四、在需要设置断点的地方插入断点设置代码

import dbgp
dbgp.brk(__file__)

 

五、运行需要调试的程序或重启相关服务

   这里提供一个启动openstack服务的脚本,非本人所写 ,不过用起来也不错,参考链接:https://github.com/liuan/openstack-x

 

六、调试完后记得删除断点设置代码

brk-clean

 

七、如果有必要,须重启相关服务

 

posted on 2014-09-24 19:30  小杰鱼  阅读(907)  评论(0编辑  收藏  举报

导航