2012-02-13 224 views
-4

我想追查異常的原因,有時堆棧跟蹤中的最後一行是它發生的地方。其他時間則不是,您需要在堆棧跟蹤中提到的其他行上設置斷點。閱讀堆棧跟蹤

作爲一個例子,如果在第二行到最後一行(從頂部開始第二行)發生異常,爲什麼堆棧跟蹤不會停在這一行?它會打印一個額外的行,這是騙人的。在運行時,該例外將顯示在該文件中作爲堆棧跟蹤的最後一行提到。但是,如果您在堆棧跟蹤中提到的第二行到最後一行設置了斷點,那麼問題就清楚了。

+6

請張貼(縮寫)堆棧跟蹤示例,並指出在哪裏您發現信息具有誤導性。 – Yuck 2012-02-13 17:10:53

回答

1

我能想到3情況下,你可能會看到一個稍微不同的堆棧跟蹤,然後在您的調試器去當異常發生:

  1. 建在釋放模式可以結束的組件,其優化的代碼您正在調試可能不完全代表正在運行的IL。
  2. 如果您嘗試{do();} catch(Exception e){throw e; }它會改變你的堆棧跟蹤。
  3. 如果您啓用了「只是我的代碼」,並且具有源代碼的外部代碼引發異常,則可能會得到與調試器要停止的堆棧跟蹤略有不同。