使用动态堆栈跟踪调试正在运行的 Python 应用程序
在排除根本原因时,遇到偶尔的应用程序冻结可能会令人沮丧。 Python 提供了一种生成实时堆栈跟踪的机制,允许您检查当前正在执行的代码并识别有问题的位置。
使用信号处理的解决方案
到获取即时堆栈跟踪,请考虑使用以下代码:
<code class="python">import code, traceback, signal def debug(sig, frame): d={'_frame':frame} # Allow access to frame object. d.update(frame.f_globals) # Unless shadowed by global 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) # Register handler listen()</code>
用法:
这将触发Python带有当前堆栈跟踪的控制台并允许您探索变量。按 Ctrl-D 恢复执行。
其他选项
要调试后台进程,请考虑使用 Python Cookbook 配方中提供的基于管道的解决方案。
以上是如何使用动态堆栈跟踪调试正在运行的 Python 应用程序?的详细内容。更多信息请关注PHP中文网其他相关文章!