Видя, какая ссылка на объект вызвала исключение NullReferenceException - PullRequest
1 голос
/ 05 августа 2009

При отладке C # в Visual Studio возможно ли увидеть, какая ссылка на объект в данной строке кода вызвала исключение NullReferenceException?

У меня возникает странная ситуация, когда при запуске отладочной сборки приложения из Visual Studio я получаю исключение NullReferenceException в определенной строке.

Visual Studio вызовет окно помощника по исключениям, указывающее на строку, но ни одна из 3 ссылок на объекты, использованных в этой строке, не будет нулевой в этой точке.


Строка:

myClassInstance.myMethod(myOtherClassInstance.IPAddressInstance.ToString());

Оба моих экземпляра класса не равны NULL, как и экземпляр IPAddress (который имеет свое предполагаемое значение).

Ответы [ 3 ]

2 голосов
/ 05 августа 2009

Будьте осторожны с функциями, которые возвращают нулевые объекты. Это дало мне один раз и не очень понятно в отладчике. Проверьте это:

public class FooBar
{
    public int ReturnInt() { return 0; }
}

public FooBar ReturnNullObject()
{
    return null;
}

// Execution code:
int exceptionalInt = ReturnNullObject().ReturnInt();

Редактировать: в соответствии с вашими правками убедитесь, что IPAddressInstance не возвращает ноль.

Редактировать: вы можете разбить одну строку на пару строк. Это должно помочь.

var ip = myOtherClassInstance.IPAddressInstance;
var ipString = ip.ToString();
myClassInstance.myMethod(ipString);
1 голос
/ 05 августа 2009

Если вы вызываете код, помеченный атрибутом [DebuggerNonUserCode], проблема может заключаться в коде платформы, а не в этой строке.

В любом случае, у вас есть конкретный пример, который вы можете опубликовать?

0 голосов
/ 05 августа 2009

Установите точку останова на этой линии в do "step-into", пока не получите NRE.

Нет магии, верно? Некоторый код пытается разыменовать null.

Даже если вы делаете что-то вроде A.Property.Property2.ToString(), так как Visual Studio говорит, что ни один из них не равен нулю, проблема заключается в методе ToString(), который заключается в сборке, которую Visual Studio не вводит в Debug.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...