2014-03-03 137 views
0

我想捕獲nullreference異常,但我想知道確切的位置(在哪個點或線我得到該異常)。我有一個類名爲Employee,它有兩個屬性:_Id_Name如何知道NullReferenceException的確切位置

static void Main(string[] args) 
{ 
    Employee empobj = new Employee(); 

    try 
    { 
     empobj = null; 
     //empobj._Id = empobj._Id.ToString(); 
     Console.WriteLine(empobj._Id); 
     Console.WriteLine(empobj._Name); 
     Console.ReadLine(); 
    } 
    catch (NullReferenceException e) 
    { 
     Console.WriteLine("Exception caught: {0}", e.InnerException); 
     Console.ReadLine(); 
    } 
} 
+4

在項目中使用調試器。 –

+2

也許stacktrace會有幫助嗎? –

+0

爲什麼你想知道確切的位置? –

回答

2

看看堆棧跟蹤,它將有一個執行樹的細分,說明行號和函數名稱等。你可以通過調試,輸出異常堆棧跟蹤到一些介質,或者通過移除try/catch並讓異常停止執行你的應用程序來完成。

的關鍵是,雖然工作異常周圍,這樣它不會發生,如果它不一個特殊情況下(即,如果你希望這是一個場景,很可能發生);所以如果你的應用程序可以檢查,如

if (thing != null) { 
    var id = thing.Id; 
    if (id != null) { 
    var idText = id.ToString(); 
    // and so on 
    } 
} else { 

} 

凡在別人,你要麼繼續不同的路線,讓用戶重試或什麼的。

如果它是一個真正異常的情況(即事情不應該爲空),並且應用程序如果它是不能做任何事情,那麼讓異常發生,它會中斷應用程序。

3

在visual studio中,進入Debug-> Exceptions菜單。

Exceptions dialog

然後選擇 「通用語言運行時例外」,檢查時拋出複選框。這將在拋出異常時中斷執行。你可以找到分隔線是引發exceptio的地方。

NullReferenceException的情況下,你不會得到很多關於堆棧跟蹤的幫助,但這樣你可以很容易地找到原因。

2

堆棧跟蹤的路要走,但異常是從以下行來:

Console.WriteLine(empobj._Id); 
Console.WriteLine(empobj._Name); 

要設置Employee對象爲null

empobj = null; 

,然後試圖訪問成員來自該類的變量將不再具有這些變量的值