NullReferenceException
的堆棧跟蹤非常無用,它們只包含方法名稱和調用堆棧。方法中的任何變量都可以爲null,並且在開發機器上無法重現錯誤時很難進行調試。獲取NullReferenceException的變量名稱
你知道一種獲得關於該錯誤的更多信息的方法,可能是獲取變量名嗎?或者你有更好的方法來調試它嗎?
NullReferenceException
的堆棧跟蹤非常無用,它們只包含方法名稱和調用堆棧。方法中的任何變量都可以爲null,並且在開發機器上無法重現錯誤時很難進行調試。獲取NullReferenceException的變量名稱
你知道一種獲得關於該錯誤的更多信息的方法,可能是獲取變量名嗎?或者你有更好的方法來調試它嗎?
保持跟蹤該名稱並不總是可能的(它可能是一個表達式)。
在可能的情況下會產生不可接受的開銷。考慮運行時將不得不跟蹤幾乎所有的參考變量,這將是昂貴的,並禁止各種優化。
另請參閱Inspect the managed stack上的我的回答以及它提到的博客文章。
簡單的解決方案是建立在更加一致空在自己的代碼檢查:
void Foo(Bar b)
{
if (b == null) throw new ArgumentNullException(nameof(b));
...
}
如果您在隨後調試時包含'Debug.AssertNonNull'(或其他任何應該包含的內容),則只需進行理智檢查就特別有用。 –
調試狀態的開銷是多少? –
你不能得到變量名。您可以確定發生異常的行。 – Alex
@Alex是的,但在生產中需要分發.pdb文件。這也阻止了混淆器的使用。 – Elmo
@Elmo祝你好運。如果你使用混淆器,堆棧跟蹤將變成垃圾。 –