当前位置:   article > 正文

如何通过pdb调试multiprocesses程序(by quqi99)_pdb 进入子进程

pdb 进入子进程

作者:张华 发表于: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() 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

试了一下,上面的方法实际不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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/236108
推荐阅读
相关标签
  

闽ICP备14008679号