Debbuging, tracing and logging (Approaches, when useful, tools and libraries)

  • [x] Debugging in Visual Studio (Various debugging options, breakpoints, watches etc.)
  • [x] Remote debugging (How to use and when)
  • [x] Tracing (Why use, BCL support, configuration, tracing vs. logging)
  • [x] Logging in applications (Purpose, levels, performance issues)
  • [x] Logging frameworks (Log4NET, BCL logging (base class library), ETW etc.)

Debugging in Visual Studio (Various debugging options, breakpoints, watches etc.)

Отладка - это мощное средство поиска любого вида ошибок.

Зачем это нужно?

  • Отловить ошибки логики
  • Узнать почему переменная не изменяется / почему результат выполнения какого-то кода не такой, как ожидалось

Various debugging options

Нажатие клавиши F5 запускает программу в отладочном режиме. (Debug | Start Debugging запустить в режиме отладки)

Чтобы запустить программу без возможности отладки, нужно нажать Ctrl+F5. (Debug | Start Without Debugging запустить в режиме выполнения и без возможности отладки)

Для отладки программа должна быть скомпилирована в конфигурации Debug, которая включает в исполняемый файл дополнительную информацию, необходимую при отладке.


Конфигурация выпуска для программы полностью оптимизируется и не содержит символической отладочной информации. Отладочная информация может быть создана в виде PDB-файлов, в зависимости от используемых параметров компилятора. Создание PDB–файлов может оказаться очень полезным, если позднее возникнет необходимость в отладке версии выпуска.

Конфигурацию сборки можно изменить в меню Сборка на панели инструментов или на страницах свойств проекта. Страницы свойств проекта зависят от конкретного языка.

Вкладки отладчика

Параметр Описание
Конфигурация Устанавливает режим для компиляции приложения: Активная (отладка), Отладка, Выпуск, Все конфигурации.
Запустить действие Опции: Запуск проекта назначается по умолчанию и запускает авто загружаемый проект для отладки. Запуск внешней программы позволяет запустить программу, не являющуюся частью проекта Visual Studio, и подсоединиться к ней. Запуск браузера, используя URL-адрес позволяет отлаживать веб-приложение.
Аргументы командной строки Задаются аргументы командной строки для отлаживаемой программы.
Рабочий каталог Задает рабочий каталог для отлаживаемой программы.
Использовать удаленный компьютер Имя удаленного компьютера, на котором приложение будет работать для отладочных целей. Расположение исполняемого файла на удаленном компьютере описывается свойством Output Path в папке "Свойства конфигурации", категория "Построение". Это место должно быть общим каталогом на удаленном компьютере.
Разрешить отладку неуправляемого кода Разрешает отлаживать вызовы машинного (неуправляемого) кода Win32 из управляемого приложения.
Разрешить отладку SQL Server Разрешает отладку объектов базы данных SQL Server.

Вкладка Построение

Параметр Описание
Символы условной компиляции Определяются константы DEBUG и TRACE. - Отладка обычно задается в отладочной версии программы и не определяется в версии для Выпуска. - Трассировка обычно определяется в версиях Отладки и Выпуска.
Оптимизировать код Параметр в отладочной версии программы следует отключать, если только не обнаружена ошибка в оптимизированном коде.
Выходной путь: Обычно для отладки равен bin\Debug.

Breakpoints

Точка прерывания (breakpoint) - это точка в коде программы, при достижении которой выполнение программы будет прервано и управление будет передано среде разработки. Можно создавать точки останова в любом месте программы, но только там, где есть код и программа может прервать выполнение.

Для создания точки нужно перейти на нужную строку и:

  • нажать F9
    • выбрать меню Debug | Toggle Breakpoint
    • дважды щелкнуть на полоске серого цвета, слева от строки текста в окне редактора кода

Напротив строки появиться красный кружок, символизирующий, что здесь стоит точка останова.

Пошаговое выполнение

• Continue (F5) - продолжить выполнение программы.

• Stop debugging (Shift+F5) - остановить отладку. При этом остановится выполнение программы на той точке, на которой сейчас и находиться;

• Restart (Ctrl+Shift+F5) - перезапустить программу. Выполнение программы будет прервано и запустится заново;

• Show Next Statement (Alt + Num *) - показать следующий оператор, переместить курсор редактора кода в курсор пошагового выполнения;

• Step Into (F11) - выполнить очередной оператор. Если это метод, то перейти в начало этого метода, чтобы начать отладку;

• Step Over (F10) - выполнить очередной оператор. Если это метод, то он будет полностью выполнен, т.е. курсор выполнения не будет входить внутрь метода;

• Step out (Shift + F11) - выйти из метода.

Watches (Просмотр значений)

На панель Locals должна быть закладка Watch. Здесь находится список, в который можно вносить свои переменные и выражения, за значениями которых мы хотим наблюдать. После каждого шага выполнения программы значение переменных (за которыми наблюдают) будут пересчитаны и отображены. Таким образом, не нужно будет после каждого шага наводить на переменную, чтобы узнать ее значение.

На закладке Locals видны переменные, которые актуальны для данного метода. Сюда включаются переменные, объявленные внутри метода и параметры метода, а так же переменная this. Параметры представлены в виде дерева для объектных типов данных.

  • Locals
    • где в виде списка представлены все переменные, доступные в текущем методе. В этом списке переменные представлены в виде трех колонок:
    • Name - название переменной
    • Value - значение переменной
    • Type - тип
  • Call stack
    • стек вызовов. В этом окне перечислены методы, которые уже были вызваны ранее.

Remote debugging (How to use and when)

Инструмент удаленной отладки (Msvsmon.exe) – маленькое приложение на базе windows, которое Visual Studio (2005) применяет для удаленной отладки, имеет простой пользовательский интерфейс, упрощающий настройку и конфигурирование.

Во время удаленной отладки Visual Studio работает на одном компьютере, а инструмент удаленной отладки работает на удаленном компьютере вместе с приложением, которое отлаживается.

Блок-схема удаленной отладки приложения ASP.NET с помощью msvsmon

How to use

Запуск msvsmon.exe

Путь к установленному Msvsmon.exe:

• Install path\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger\x86

Первый запуск msvsmon.exe

Главная конфигурация требует режим проверки подлинности (аутентификации).

Msvsmon поддерживает два типа аутентификации

• Аутентификация Windows

• Без аутентификации

  • Инструмент отладочного монитора позволяет нескольким пользователям отлаживать одновременно.
  • Каждый экземпляр удаленного отладчика имеет уникальное имя сервера.

Имена сервера изменяемые, поэтому можно дать экземпляру удаленного отладчика любое имя сервера. Соответственно пользователей смогут подключаться к одному и тому же серверу
Общая блок-схема из нескольких экземпляров отладчика

Советы по удаленной отладке

• Компоненты удаленной отладки Visual Studio 2005 должны быть установлены на удаленном компьютере

• Нужно ссылаться на удаленный компьютер, используя имя компьютера вместо IP адреса.

• Файл Web.config для приложения ASP.NET не должен содержать никаких ошибок, и атрибут отладки элемента компиляции должен быть установлен в Истину.

• Убедитесь, что брандмауэр не блокирует удаленную отладку.

• Настройки безопасности для сайта должны разрешать комплексную аутентификацию Windows.

Вывод:

msvsmon – утилита, предоставляющая средство отладки приложения, размещенного на удаленном сервере IIS. Она предоставляет два типа режима аутентификации, Windows и режим без аутентификации.

В случае режима аутентификации windows пользователь должен иметь разрешение на доступ к экземпляру удаленного отладчика, но, с другой стороны, режим без аутентификации не требует полномочий доступа.

Общая сводка

When

• На локальном сервере разработки не установлен IIS.

• Сервер разработки и сервер компоновки / выпуска / хостинга различаются

• Приложение размещено в централизованном месте.

Tracing (Why use, BCL support, configuration, tracing vs. logging)

Трассировка - как работает программа, используя логирование (делается через логгирование).
или с помощью инструментирования (например, code coverage).

Логирование можно использовать для трассировки или в отладке, для аудита (проверка доступа (например, человека пустили на портал ,в случае нашем) - бизнес логирование).

Цель примерно одинакова, одинаковы за исключением небольшого оттенка.

Что это и зачем использовать:

Трассировка кода — получение информационных сообщений о работе приложения во время выполнения.

Класс Trace предоставляет средства для контроля и исследования производительности приложения как во время разработки, так и после развертывания. Можно выполнять код трассировки в уже установленном приложении.
Позволяет отслеживать состояние приложения в производственной среде.

Проблемы?

  • Невозможно протестировать реакцию распределенного приложения на интенсивные нагрузки, различные настройки и действия конечных пользователей.
  • Многие компоненты распределенного приложения не имеют пользовательского интерфейса, обеспечивающего возможность непосредственного взаимодействия / обзора активности этих компонентов.

Improve

  • Разрешает распределенному приложению информировать системных администраторов о важных событиях — посредством размещения операторов трассировки в важнейших участках кода.
  • Операторы трассировки помогают избежать сложностей проверки исходного кода, его изменения, повторной компиляции и попыток воспроизвести ошибку во время выполнения в среде отладки.
  • Cуществует возможность инструментировать приложение как в целях отображения ошибок, так и мониторинга производительности.

BCL support (base class library)

Трассировка сети в .NET Framework предоставляет доступ к сведениям о вызовах методов и о сетевом трафике, созданном управляемым приложением. Эта возможность полезна для отладки приложений на стадии разработки, а также для анализа развернутых приложений.

Чтобы включить трассировку сети в .NET Framework, необходимо выбрать назначение для выходных данных трассировки и добавить параметры конфигурации трассировки сети в файл конфигурации приложения или компьютера.

Если трассировка включена, сведения о трассировке можно получать с помощью классов System.Net.

Конфигурация

Файл конфигурации дает возможность управлять использованием параметров после его развертывания.

При разработке приложения, для которого предполагается использовать трассировку, в код включаются сообщения трассировки и отладки.

Преимущество: При включении условного атрибута Trace, компилятор вставит в исполняемый файл код трассировки. (можем контролировать)

Этапы трассировки кода

  • Инструментирование — добавление в приложение кода трассировки.

  • Трассировка — код трассировки записывает данные в заданном конечном расположении.

  • Анализ — оценка сведений трассировки для выявления и понимания проблем, имеющихся в приложении.

Во время разработки все методы вывода трассировки и отладки по умолчанию записывают сведения в окне вывода Visual Studio.

Вывод трассировки

Сведения трассировки всегда записываются как минимум в целевой объект вывода DefaultTraceListener класса Trace.

Шесть членов класса Debug и методов класса Trace, которые записывают сведения трассировки:Вопросы безопасности

Если не отключить трассировку и отладку перед развертыванием приложения ASP.NET, приложение будет отображать сведения о себе, которыми могут воспользоваться вредоносные программы.

tracing vs. logging

Классы Trace (Трассировка) и Debug (Отладка) используются для генерации вывода трассировки и отладки Они имеют идентичные методы и свойства, которые позволяют выводить диагностику

Информация о трассировке будет в исполняемом файле после проблем с деплоем : решение: передеплой.

Trace = логированию для .net.

Debug = Трассировка, за исключением того, что он не доступен / не используется в Production.

PDB файл - маппинг байтового файла на реальный код.


Logging in applications (Purpose, levels, performance issues)

Purpose

·сказать, что же делает система прямо сейчас, не прибегая к помощи отладчика, т.к. это иногда не оправдано;

·провести «расследование» обстоятельств, которые привели к определённому состоянию системы (например, падению или багу);

·проанализировать, на что тратится больше времени/ресурсов, т.е. профилирование.

Levels

Debug: сообщения отладки, профилирования.

Info: обычные сообщения, информирующие о действиях системы. (хороши при поиске багов, расследовании интересных ситуаций и т. д.)
Warn: записывая такое сообщение, система пытается привлечь внимание обслуживающего персонала. Произошло что-то странное. Возможно, это новый тип ситуации, ещё не известный системе.
Error: ошибка в работе системы, требующая вмешательства

Fatal: это особый класс ошибок. Такие ошибки приводят к неработоспособности системы в целом, или неработоспособности одной из подсистем.

Performance issues

Thread-safety
Потокобезопасность – очень важное требование к логгеру. Плохой логгер может:

·пропустить часть сообщений;

·выбросить исключение

·отрицательно повлиять на производительность


Комментарий: Логировщик - это список с отладочной информацией.
В случае использования многопоточности, потоки могут переписывать друг друга из-за гонки данных / список может просто поломаться и т.п. - следовательно при выборе логгировщика нужно с особым вниманием смотреть на его потокобезопасность.

Пример (безопасный логировщик): Три потока - у каждого свой список событий , но ивенты разные, они у себя выполняют логирование информации, после отдельный служебный поток их мержит - один из вариантов решения проблемы выше.

Может быть проблема с совпадающими ивентами.


Logging frameworks (Log4NET, BCL logging (base class library), ETW etc.)

Log4NET

What is Apache log4net™

The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets. log4net is a port of the excellent Apache log4j™ framework to the Microsoft® .NET runtime. We have kept the framework similar in spirit to the original log4j while taking advantage of new features in the .NET runtime. For more information on log4net see the features document.

The Apache log4net project

log4net is part of the Apache Logging Services project at the Apache Software Foundation. The Logging Services project is intended to provide cross-language logging services for purposes of application debugging and auditing.

NLOG

NLog is a free logging platform for .NET, NETSTANDARD, Xamarin, Silverlight and Windows Phone with rich log routing and management capabilities. NLog makes it easy to produce and manage high-quality logs for your application regardless of its size or complexity.

NLog can process diagnostic messages emitted from any .NET language (C#, VB.NET etc.), augment them with contextual information (date and time, severity, thread, process, environment), format according to your preferences and send to one or more targets

Сравнение логгеров

NLog Log4net Enterprise Library
Лицензия BSD Apache MS-PL
Уровни Debug Trace Info Warn Error Fatal Debug Info Warn Error Fatal Verbose Information Warning Error Critical
Ротация логов Да Да Да
Слежение за конфигом Да Да Нет (?)
Логгирование масивов Нет Да Нет
Thread safety Да Да Да
Протоколы Сеть Память MSMQ База …расширения WMI Сеть Память База …расширения WMI MSMQ База …расширения
Буферизация, асинхронное логгирование Да Да Да
Состояние Активный https://github.com/apache/logging-log4net/network - 2017 Умеренно активный Активный

results matching ""

    No results matching ""