栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

显示正在运行的Python应用程序的堆栈跟踪

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

显示正在运行的Python应用程序的堆栈跟踪

我有用于以下情况的模块-进程将长时间运行,但有时由于未知且不可复制的原因而卡住。它有点hacky,并且只能在unix上运行(需要信号):

import pre, traceback, signaldef debug(sig, frame):    """Interrupt running process, and provide a python prompt for    interactive debugging."""    d={'_frame':frame}         # Allow access to frame object.    d.update(frame.f_globals)  # Unless shadowed by global    d.update(frame.f_locals)    i = pre.InteractiveConsole(d)    message  = "Signal received : entering python shell.nTraceback:n"    message += ''.join(traceback.format_stack(frame))    i.interact(message)def listen():    signal.signal(signal.SIGUSR1, debug)  # Register handler

要使用它,只需在程序启动时在某个时候调用listen()函数(您甚至可以将其粘贴在site.py中,以使所有python程序都使用它),然后使其运行。在任何时候,使用kill或在python中向进程发送SIGUSR1信号:

    os.kill(pid, signal.SIGUSR1)

这将导致程序在当前位置中断到python控制台,向您显示堆栈跟踪,并允许您操作变量。使用control-d(EOF)继续运行(尽管请注意,您可能会在发出信号时中断任何I
/ O等,因此它并不是完全非侵入式的。

我有另一个执行相同功能的脚本,除了它通过管道与正在运行的进程通信(允许调试后台进程等)。它在这里发布有点大,但我已将其添加为python食谱。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号