天天看點

使用pdb調試ceilometer代碼Newton版本以前,Ceilometer代碼調試方法:Newton版本以後,Ceilometer代碼調試方法:

本部落格所有文章采用的授權方式為 自由轉載-非商用-非衍生-保持署名 ,轉載請務必注明出處,謝謝。

聲明:

本部落格歡迎轉發,但請注明出處,保留原作者資訊

部落格位址:孟阿龍的部落格

所有内容為本人學習、研究、總結。如有雷同,實屬榮幸

Newton版本以前,Ceilometer代碼調試方法:

ceilometer在Newton版本以前,polling-agent使用的是oslo_service子產品啟動的程序,是以可以直接使用python内建的子產品 pdb 直接進行調試。具體調試方法如下:

  1. 在需要增加斷點的地方,加入一行代碼:
import pdb;pdb.set_trace()
           
  1. 之後在指令行啟動程序,即可走到斷點處:
/usr/bin/ceilometer-polling --polling-namespaces=central --logfile /var/log/ceilometer.log
           
  1. 進入斷點之後,pdb基本的指令如下:
p var : 列印指定變量var的内容
p  dict_var.__dict__ : 列印dict類型變量的内容
n : 跳過目前行繼續執行下一行
s : 進入目前行對應函數的内部
           

Newton版本以後,Ceilometer代碼調試方法:

ceilometer在Newton版本開始,使用cotyledon 這個子產品來啟動程序架構,該子產品底層是multiprocess,啟動程序架構之後會進入子程序,此時使用上邊的方法就不能進入到子程序的debug,此時需要使用如下方法:

  1. 增加一個新的類,用于調試多線程
import sys
import pdb

class ForkedPdb(pdb.Pdb):
    def interaction(self, *args, **kwargs):
        _stdin = sys.stdin
        try:
            sys.stdin = open('/dev/stdin')
            pdb.Pdb.interaction(self, *args, **kwargs)
        finally:
            sys.stdin = _stdin
           
  1. 在需要添加斷點的地方,使用如下方法添加斷點:
ForkedPdb().set_trace()
           
  1. 之後啟動程序,即可進入到pdb調試模式,具體的指令和上邊一緻

繼續閱讀