我正在编写一个python程序,它使用Tkinter for windows并在多个线程上运行。偶尔它会冻结,当我停止它时,我不会得到堆栈跟踪。我尝试通过运行带traceback.print_stack()
的单独线程来获取堆栈,但这只打印该线程的堆栈。
我有办法从所有线程获取堆栈跟踪,还是需要逐个检查它们?
是否有一种很好的方法可以持续监控堆栈,以便我可以弄清楚为什么我的程序没有响应?
答案 0 :(得分:0)
所以我发现做的最好的事情是将所有线程放在try循环中,然后当发生异常时使用traceback
打印出错误。我也尝试给我的线程名称,以便他们在遇到问题时告诉我他们是谁。下面是一个例子。
import traceback
class mt_thread:
def __init__(self,name):
self.name=name
thread.start_new_thread(self.thread_code,())
def thread_code(self):
try:
"CODE HERE"
except:
print self.name,"ERROR"
traceback.print_exc()
new_thread=my_thread("thread_1")