使用pdb调试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调试模式,具体的命令和上边一致
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,741评论 25 709
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,060评论 3 119
  • 2016年的第一本书,兄弟推荐的,本来不熟蔡崇达,上手后,一直想停一停,静一静,写点东西,这才理解韩寒说的,有的书...
    自在书童阅读 1,778评论 0 3
  • (声明:本文为月未全满原创,欢迎原文转发。任何平台转载请简信联系本人。) 看到这个标题,papi要来打我的脸了。 ...
    月未全满阅读 4,583评论 4 6
  • 自由写作2017一月(八) “生活包含着更广阔的意义,而不在于我们实际得到了什么,关键是我们的心灵是否充实。对于生...
    晓米eR阅读 1,724评论 0 2

友情链接更多精彩内容