【问题标题】:Python pdb for a background process用于后台进程的 Python pdb
【发布时间】:2016-03-10 18:01:25
【问题描述】:

我有一个 python 进程,产生多个后台进程。我目前看到一个/多个后台进程陷入死循环,或者它们变得反应迟钝。

我想将调试器附加到后台进程。所以,我可以弄清楚出了什么问题。我已经为我设置 pdb 跟踪的后台进程 (SIGUSR1) 注册了一个信号处理程序。

每当它挂起时,我都会将信号从另一个控制台发送到后台进程。但是,我没有看到任何可以帮助我调试代码的终端。

我做错了吗?或者有没有更好的方法将调试器附加到后台 python 进程。

我在 MAC 上运行,因此使用 gdb 并不简单。

  def installHandlers():
    signal.signal(signal.SIGUSR1,debugHandle)

   def debugHandle(sig,frame):                                                          
     global processLog
     processLog.info("got the SIGUSR1")                                               
     import pdb                                                                       
     pdb.Pdb().set_trace(frame) 
   

-谢谢

【问题讨论】:

    标签: python unix process


    【解决方案1】:

    我认为这是因为 Python 在 multiprocessing.Process._bootstrap() 中关闭了父进程的标准输入。因此 pdb.set_trace() 在子进程中不起作用。 它通常会因错误而失败。也许您没有看到错误,因为您将标准输出重定向到某个地方?

    【讨论】:

      【解决方案2】:

      有一个 pdb 的克隆,想象中称为pdb-clone,它允许debugging of background processes

      您只需将from pdb_clone import pdbhandler; pdbhandler.register() 添加到主进程的代码中,然后您就可以使用pdb-attach --kill --pid PID 启动pdb。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-02
        • 2020-03-28
        • 2013-09-03
        • 2015-04-30
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多