赞
踩
作者:张华 发表于:2020-09-16
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
ceilometer Newton之前使用oslo_service启动进程这时可以使用pdb直接调试,但之后使用cotyledon模块启动进程框架,它底层是multiprocess,启动进程框架后会进入子进程,子进程的stdin/out/err等文件均已关闭,pdb也就无法在子进程里运行了.下面通过实现一个新的类ForkedPdb重定向stdin的方法实现子进程调试
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
#在需要调试的地方加下列一行
#import pdb;pdb.set_trace()
ForkedPdb().set_trace()
试了一下,上面的方法实际不work, 最好还是通过rpdb调试:
apt install python3-pip -y
pip3 install rpdb
import rpdb;rpdb.set_trace() #add this line in /usr/lib/python3/dist-packages/ceilometer/pipeline/event.py
change workers=1 in /etc/ceilometer/ceilometer.conf
systemctl restart ceilometer-agent-notification
tail -f /var/log/ceilometer/ceilometer-agent-notification.log
./tools/instance_launch.sh 1 cirros #use it to trigger breakpoint
netstat -anp |grep 4444
nc 127.0.0.1 4444
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。