Как найти источник ошибки
От: e.thrash  
Дата: 16.08.23 08:37
Оценка:
Есть такой код.
Проблема в том что в foreach при первом проходе childPeriod показывает ошибку в Watch

Exception of type 'System.NullReferenceException' was thrown: Object reference not set to an instance of an object.


хотя ошибку не кидает явно и идет дальше по коду. Ошибка ниже всё равно кидается.

    var childPeriods = await Get();
                    
        для дебага              
        [q]
            var f = childPeriods.First();
                    var id = f.Id;
                    var ft = cars.First(s => s.Id == id);
        [/q]

                foreach (var childPeriod in childPeriods)
                {


childPeriods заполняется нормально и содержит 6 элементов. Внутри посмотрел все свойства, ошибки никакое не кидает.

Для дебага добавил выше foreach код и там ошибка не кидается и всё создается.

childPeriods обычный тип IList<Car>

Как такие ошибки дебажить\искать?
Re: Как найти источник ошибки
От: e.thrash  
Дата: 16.08.23 14:00
Оценка:
Здравствуйте, e.thrash, Вы писали:

похоже какое-то вычисляемое свойство кидает ошибку по типу

 string name = null;
 
 public string realName => name.Trim('');


а как можно найти какое свойство кидает ошибку если много свойств и много вложенностей? Можно понять в каком свойстве ошибка?
Re[2]: Как найти источник ошибки
От: Разраб  
Дата: 16.08.23 23:51
Оценка:
Здравствуйте, e.thrash, Вы писали:

ET>Здравствуйте, e.thrash, Вы писали:


ET> похоже какое-то вычисляемое свойство кидает ошибку по типу


ET>
ET> string name = null;
 
ET> public string realName => name.Trim('');
ET>


ET>а как можно найти какое свойство кидает ошибку если много свойств и много вложенностей? Можно понять в каком свойстве ошибка?

Уверены?
ну занулите св-во у первого элемента и проверьте.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Как найти источник ошибки
От: e.thrash  
Дата: 17.08.23 08:10
Оценка:
Здравствуйте, Разраб, Вы писали:



ET>>а как можно найти какое свойство кидает ошибку если много свойств и много вложенностей? Можно понять в каком свойстве ошибка?

Р>Уверены?
Р>ну занулите св-во у первого элемента и проверьте.

проблема что много свойств которые в свою очередь являются классом.
То есть есть у меня массив List<Car> и в одном из элементов какое-то свойство Bbb кидает NRE.
Как найти в каком элементе какое свойство кидает NRE

по типу

Car 
  List<CarItem> CarItems
  Bamper bamper


CarItem
  List<Feature> features

Feature

  Serial => a.Trim() + b.trim()
  Bbb => a.Trim() + c.Trim()
Re[4]: Как найти источник ошибки
От: Разраб  
Дата: 17.08.23 08:19
Оценка:
Здравствуйте, e.thrash, Вы писали:

ET>проблема что много свойств которые в свою очередь являются классом.


Много это сколько?

Еще по стартовому непонятно. В дебаге нет ошибки, а на проде есть?
Откуда данные? из базы?
Стэк трэйс полностью смотрите.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Как найти источник ошибки
От: e.thrash  
Дата: 17.08.23 11:05
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Здравствуйте, e.thrash, Вы писали:


ET>>проблема что много свойств которые в свою очередь являются классом.


Р>Много это сколько?


там 3 уровня вложенности по свойствам часто и на каждом уровне это может быть массив элементов

Р>Еще по стартовому непонятно. В дебаге нет ошибки, а на проде есть?


в дебаге ошибка есть, просто она не кидается, т.к. это геттер свойства
просто когда я пытаюсь в такой конструкции увидеть объект то вижу вместо объекта NRE в дебаге

foreach(var car in cars)



Р>Откуда данные? из базы?


да, из базы, но NRE в геттере вычисляемого поля в шарпе

Р>Стэк трэйс полностью смотрите.


так в стектрейсе показывается точка где ошибка уже происходит, а не NRE в свойстве.
Если бы ошибки не было, то про NRE можно было и не узнать, т.к. к нему не было обращений

Car 

  string ErrorProperty => NRE

foreach(var car in cars)
{

  ...много кода
  var total = dictionary[car.Id]
Re: Как найти источник ошибки
От: RushDevion Россия  
Дата: 17.08.23 14:29
Оценка: 2 (1) +2
ET>Как такие ошибки дебажить\искать?

Код свой (в смысле исходники есть) или это какие-то сторонние сборки?
Если свой, то включай в "Exception Settings" все ошибки для "Common Language Runtime" и запускай в дебаге.
На ошибке должно вывалиться в отладчик прямо на той строке, где она возникла.
Re[2]: Как найти источник ошибки
От: Xander Zerge Россия www.zerge.com
Дата: 17.08.23 16:00
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Если свой, то включай в "Exception Settings" все ошибки для "Common Language Runtime" и запускай в дебаге.


Ещё можно подписаться на AppDomain.FirstChanceException. Сам такое практикую, выводя все исключения в лог Debug-уровня. А там и по StackTrace можно размотать.
Серёжа Новиков,
программист
Re[2]: Как найти источник ошибки
От: e.thrash  
Дата: 17.08.23 18:10
Оценка:
Здравствуйте, RushDevion, Вы писали:

ET>>Как такие ошибки дебажить\искать?


RD>Код свой (в смысле исходники есть) или это какие-то сторонние сборки?

RD>Если свой, то включай в "Exception Settings" все ошибки для "Common Language Runtime" и запускай в дебаге.

да, код свой. Спасибо
Re[6]: Как найти источник ошибки
От: Разраб  
Дата: 17.08.23 23:48
Оценка:
Здравствуйте, e.thrash, Вы писали:

ET>там 3 уровня вложенности по свойствам часто и на каждом уровне это может быть массив элементов


Кто-то же его написал. Так что и проверить код реально.
Лучше уже тогда вообще покрыть тестами.
Ведь данные извне, вы их не контролируете.
Сейчас найдете одну ошибку в дебаге, завтра новая вылезет.
В итоге все равно проверите все. По времени может даже затратнее.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Как найти источник ошибки
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 21.08.23 09:52
Оценка:
вам нужно понять являутся ли NRE's багом или исключением и действовать соответственно, а именно — использовать защитное кодирование типа unsafeString?.Trim() или же кидать исключение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.