程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 正常狀態如何獲得TraceBack

正常狀態如何獲得TraceBack

編輯:.NET實例教程

當有異常發生時,可以利用sys.exc_info()獲得異常發生點的TraceBack。但正常狀態如何獲得TraceBack呢?查了很久資料都沒有找到答案。

  想來想去,只找到兩種不完美的方案:

  【方案一】

  主動引發一個異常,從而獲得其TraceBack。事實上,traceback.extract_stack裡就是這麼干的:

1 def extract_stack(f=None, limit = None):
2     
3     if f is None:
4         try:
5             raise ZeroDivisionError
6         except ZeroDivisionError:
7             f = sys.exc_info()[2].tb_frame.f_back
8     

  這種強行引發異常的方法,肯定會降低性能。

  【方案二】

  利用sys.settrace,自行對調用堆棧進行跟蹤。大致這樣來做:

1 def mytrace(frame, event, args):
2     if (event == 'call'):
3         
4     elif (event == 'return'):
5         
6 sys.settrace(mytrace)

  這樣做,所有的調用都會額外地引發這段自定義處理,顯然也會嚴重影響性能。

  上面兩種方案看來只能應用在Debug環境中。不知道有沒有安全、高效的方法……

本文作者:未知
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved