尽管 Python 很稳定,但应用程序偶尔会遇到死锁或意外冻结。确定这些问题的根本原因可能具有挑战性。
要深入了解正在运行的 Python 程序的当前状态,一个有用的工具是“即时”堆栈跟踪。这使您可以检查正在执行的确切代码,从而可能查明任何问题的根源。
可以使用模块来启用动态堆栈跟踪- 飞行堆栈跟踪检查。该模块仅在 Unix 系统上运行并使用信号:
<code class="python">import code, traceback, signal def debug(sig, frame): d={'_frame':frame} d.update(frame.f_globals) d.update(frame.f_locals) i = code.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)</code>
要使用该模块,只需在程序初始化期间调用listen():
<code class="python">listen()</code>
当程序遇到问题时,使用kill或在Python中发送SIGUSR1信号:
<code class="python">os.kill(pid, signal.SIGUSR1)</code>
这将中断程序并在执行点打开交互式Python控制台。您可以检查堆栈跟踪并探索变量来确定问题的原因。
请注意,触发信号时,此方法可能会中断 I/O 操作。
要进行更广泛的调试,可以使用单独的脚本通过管道建立通信,从而启用后台进程的调试。
以上是如何动态显示实时 Python 应用程序的堆栈跟踪?的详细内容。更多信息请关注PHP中文网其他相关文章!