关于调试:如何强制python的VM打印堆栈跟踪?

How to force python's VM to print a stack trace?

我正在处理一个用python编写的服务器,它锁定并停止工作,包括日志记录。我想知道是否有一个Python相当于Java的"杀死3"信号,它至少打印当前的StActTrace。


使用FaultHandler模块。https://pypi.python.org/pypi/faulthandler/

1
2
import faulthandler
faulthandler.register(signal.SIGUSR1)

这在C级的python解释器循环信号处理之外工作,因此即使python解释器本身挂起等待其他东西,它也能工作。

另请参见:http://docs.python.org/dev/library/faulthandler


1
2
3
4
import signal, traceback
def quit_handler(signum,frame):
    traceback.print_stack()
signal.signal(signal.SIGQUIT,quit_handler)


您可以在这个问题中找到(仅限于UNIX)解决方案。