Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога

О том как отладка может нарушить порядок выполнения

Сегодня столкнулся с ситуацией, когда программа под отладчиком работала не так как реал-тайме. Попробую смоделировать. Имеем следующий код:

    class Program
    {
        static void Main(string[] args)
        {
            Debug.WriteLine("1. Старт приложения.");
            var class1 = new Class1();
            Debug.WriteLine("2. Какие-то полезные действия.");
            Console.WriteLine(class1.Obj);
            Debug.WriteLine("4. Завершение приложения.");
        }
    }
    class Class1
    {
        private object _obj;
        public object Obj
        {
            get
            {
                if (_obj == null)
                {
                    Debug.WriteLine("3. Инициализация свойства Obj класса Class1");
                    _obj = "Sample object";
                }
                return _obj;
            }
        }
    }


В результате исполнения в окне отладчика:


Теперь поставим точку останова в начало функции Main и добавим свойство Obj экземпляра class1 в контролируемые значения:


Пройдемся пошагово по функции Main:


В окне отладчика:


Беда в том, что даже если мы поставим точку останова внутри Class1.Obj.get(), проходя пошагово функцию Main мы в эту точку останова не попадем. Отладчик вызывает Class1.Obj.get() для того чтобы отобразить значение свойства class1.Obj игнорируя точки останова и даже возникающие исключения внутри этой функции! Как говорится комментарии излишни.
Надіслане від Rudenko | 2 коментарів
Помічено як: , ,