2010-11-27 24 views
0

我有運行在服務器上的DLL,由於很多原因我無法調試它,我記錄了它的異常。
有時我在有一個方法調用"Object reference not set to an instance of an object"有約20個參數,從我很長時間知道哪裏是導致異常的對象。究竟哪個對象導致「對象引用未設置爲對象的實例」?

有沒有辦法在"Object reference not set to an instance of an object"的情況下使用導致異常的對象的名稱來記錄異常?

+4

有方法用20個參數是一個壞主意在任何情況下... – 2010-11-27 12:52:54

回答

2

如果你想日誌這是空(這聽起來像調試出了問題),您將需要單獨測試每個參數爲空,拋出ArgumentNullException該參數如果是空的確切說法將參數的名稱作爲字符串傳遞給exception's constructor

這是接受20個參數的方法會導致嚴格的維護問題的一個原因(很多)。它表明一種方法可能有太多的責任,可能會試圖做更多的事情。當你在代碼中時,你可能想考慮把這個方法分解成更小的部分。

0

確定是什麼對象造成這種情況的最簡單方法是將調試器附加到您正在運行的任何代碼。您可能需要運行一個單獨的服務器,運行以調試模式構建的代碼。在Visual Studio中,如果進入Debug - > Exceptions ...菜單項,您將有一個包含兩列的異常類型對話框。檢查公用語言運行時例外的Thrown列。然後嘗試拋出異常的操作。這是對象導致問題的最簡單方法。

您還可以嘗試查看是否有任何側面影響是由此錯誤出現引起的,並從此處追溯它。

您也可以打印錯誤的整個堆棧跟蹤而不是錯誤消息。這可能會給你你需要的細節。

1

如果您知道發生異常的線路,您可以使用Redgate .NET Reflector Free反彙編獲得更多信息!

否則:沒有,有沒有機會得到的參數名稱,它導致了異常,但有一個ArgumentException(其中包括在異常的參數的名稱)

相關問題