在python应用程序退出之前捕获它

2024-03-29 08:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python应用程序,它应该是非常长寿命的,但有时进程只是消失,我不知道为什么。当这种情况发生时什么都不会被记录,所以我有点不知所措。在

在代码中有没有某种方法可以钩住一个退出事件,或者用其他方法让我的一些代码在进程退出之前运行?我想记录内存结构的状态,以便更好地了解发生了什么。在


Tags: 方法内存代码应用程序进程状态记录事件
3条回答

您可以尝试直接从控制台运行应用程序(在windows上是cmd,在unix上是sh/bash/etc),这样当进程结束时,您可以看到任何堆栈跟踪等打印到控制台上。在

我不确定您是否能够修改源代码,但如果可以,您可以尝试以下操作:

def debugexcept(type, value, tb):
    if hasattr(sys, 'ps1') or not (sys.stderr.isatty() and sys.stdin.isatty()) or type == SyntaxError:
        sys.__excepthook__(type, value, tb)
    else:
        import traceback, pdb
        traceback.print_exception(type, value, tb)
        print
        pdb.pm()


sys.excepthook = debugexcept

如果您从命令行启动python程序,那么应该在python调试程序停止运行时将其转储到python调试器中,假设发生了导致异常的“坏”情况。我猜可能stderr/stdout被捕获了,你没有看到什么异常吗?在

ie搜索如下内容:

^{pr2}$

如果这一过程毫无例外地消亡,那么这可能更难找到。windows上的一种(非常困难的方法)是使用类似windbg的东西附加到进程中,并在CRT中的某个相关位置设置断点。在

祝你好运!在

^{}发音为“at exit”。第一次读这个函数名时,我把它读作“一个texit”,这几乎没有什么意义。在

相关问题 更多 >