當程式運行後出現異常怎麼辦?很簡單,Debug!可是如果一個異常可以讓Debugger都無法工作,這樣會不會很無語。
如果在ToString方法中不小心造成StackOverflowException,那麼Visual Studio調試器就會無法工作。測試環境是Visual Studio 2012 Express for Windows Desktop(包括Update 1版本)。
比如這樣一個簡單的類型:
class Test
{
public override string ToString()
{
return this.ToString();
}
}
然後設定斷點,開始調試:
在調試過程中,每當你把滑鼠指向test變數,Visual Studio調試器都會閃退。(事實上,在我這裡Visual Studio調試器會在調試開始後的幾秒鐘後自行默默退出)。
在一些更複雜的代碼環境下(同樣是由於ToString中的StackOverflowException,只不過調試時對象的參考關聯性更複雜些):
Visual Studio可能會提示:“The debugger cannot continue running the process. Process was terminated.”(調試器無法繼續運行進程,進程被終止。)
在變數資訊視窗中可能會提示類似:”Cannot dereference expression. The pointer is not valid.”或者”Cannot evaluate expression because debugging information has been optimized away.”等資訊。如:
但是如果在ToString中誘發其他普通異常,比如:
public override string ToString()
{
throw new Exception("TEST");
}
調試器會顯示類型的完整名稱,不會有閃退這樣不友好的動作: