Debugging — Как проверить скорость выполнения кода


Содержание

DebugDiag упрощает поиск ошибок

При отладке приложений — например, когда возникают сбои и снижается скорость выполнения, происходят отказы, зависание и утечка памяти,- обычно требуется исследовать процессы, выполнявшиеся в момент возникновения сбоя.

При отладке приложений — например, когда возникают сбои и снижается скорость выполнения, происходят отказы, зависание и утечка памяти, — обычно требуется исследовать процессы, выполнявшиеся в момент возникновения сбоя. Задача осложняется тем, что серверные приложения, такие как Microsoft IIS, Exchange Server, SQL Server, COM+ и BizTalk Server, часто не имеют пользовательского интерфейса и автоматически перезагружаются без указания причин сбоя. Наличие под рукой удобного инструмента для отладки, который бы находил причину сбоя, при этом очень желательно. Для таких целей Debug Diagnostic Tool (DebugDiag) в большинстве случаев подходит больше, чем другие средства отладки, например ADPlus, Userdump и WinDbg. Почему именно DebugDiag?

Чтобы ответить на этот вопрос, давайте сначала посмотрим, почему процесс может дать сбой. Сбой — это неожиданное прекращение работы программы в случае, когда процесс завершается аномально. Обычно сбой бывает вызван необрабатываемым исключением; но происходит это и в том случае, когда процесс обнаруживает проблемную ситуацию и завершается без обработки исключения (например, процесс зацикливается, вызывая чрезмерное использование памяти).

Часто в такой ситуации процесс или служба запускаются повторно в надежде, что сбой больше не повторится. Однако, чтобы действительно понять причину, которая вызвала сбой, и устранить ее, необходимо выполнить анализ состояния процессов в момент сбоя. Локализовать это состояние можно, создавая пользовательский файл дампа. Эти файлы генерируются любыми отладчиками Windows, они имеют расширения .dmp,.hdmp или .mdmp. Основные отладчики Windows для процессов — это Windbg, Cdb и ntsd, их пользовательские дампы для анализа могут содержать ключи к разгадке причин сбоя. Точный анализ файла дампа для процесса может потребовать просмотра экспертом. И вот тут понадобится DebugDiag, который заметно упрощает анализ процесса поиска ошибок.

Инструмент DebugDiag комбинирует многие основные функции каждого отладчика из набора Windows Debugging Tools (ADPlus, Userdump и WinDbg), кроме того, он снабжен прекрасным пользовательским интерфейсом, что облегчает его применение. Самую последнюю версию DebugDiag можно загрузить по адресу www.microsoft.com/downloads/details.aspx? family >

DebugDiag в действии

Рассмотрим, как подразделение Microsoft Global Escalation Services использует DebugDiag для работы с вопросами клиентов. Пример: на Web-сайте клиента постоянно случались сбои, и мы думали, что причиной была ошибка процесса Web-сервера Microsoft World Wide Web. Поэтому мы установили DebugDiag и настроили его специально на сбои в службе публикации World Wide Web Publishing Service.

После установки и запуска DebugDiag сразу возникает диалоговое окно мастера Select Rule Type, в котором можно выбрать нужное правило. Это правило зависит от того, что надо проверить. В нашем примере целью были сбои в процессе, поэтому следовало выбрать тип правила Crash (сбой) в диалоговом окне Select Rule Type, потом нажать кнопку Next.

Теперь выбираем тип процесса для отслеживания в диалоговом окне Select Target Type, например отдельная служба NT, какой-то конкретный процесс (прикладной процесс или все процессы IIS/COM+). Для данного случая при поддержке клиента мы выбрали мониторинг отдельной службы и потом службу публикации World Wide Web Publishing Service в диалоговом окне Select Target.

В следующем окне мастера Advanced Configuration (Optional) настраиваем необязательные расширенные настройки для мониторинга сбоя. В нашем случае мы просто выбрали вариант по умолчанию и нажали Next. Затем появляется диалоговое окно для ввода имени правила и пути, где будет храниться информация пользовательского дампа; нажимаем Next, чтобы сохранить параметры по умолчанию или вносим изменения, например меняем каталог по умолчанию для хранения файлов дампа.

В последнем диалоговом окне можно активировать правило сразу или позднее вручную. Затем нажимаем Finish. Замечу, что можно выбрать параметр activate later, если не планируется проводить мониторинг сейчас, на случай завершения настройки в дальнейшем.

Теперь появляется главное окно приложения DebugDiag с тремя вкладками. Выбираем вкладку Rules, чтобы увидеть настроенные правила для этой системы, имя правила, состояние правила (активное или нет) и счетчик пользовательского дампа Userdump Count. Параметр Userdump Count — это число сбоев в проверяемом процессе, которые DebugDiag обрабатывает и сохраняет информацию по адресу в столбце Userdump Path. На вкладке Processes показаны запущенные в данный момент на системе процессы.

Анализ информации

После настройки DebugDiag с целью мониторинга отдельного процесса можно перезагрузить систему и выйти из сеанса, не заботясь о нарушении процесса мониторинга. Если есть подозрение, что отслеживаемый процесс дал сбой, можно проверить окно приложения DebugDiag и просмотреть столбец Userdump Count, чтобы убедиться, что пользовательский файл дампа создан.

На экране 1 показана вкладка Advanced Analysis, в которой надо выбрать сценарий работы для анализа информации пользовательского дампа для процесса мониторинга.

Здесь выбран сценарий Crash/Hang Analyzers (анализаторы сбоя/зависания), так как требуется анализировать сбой процесса. Затем следует добавить анализируемый пользовательский файл дампа, для этого нужно нажать кнопку Add Data Files и перейти на место хранения собранных пользовательских дампов. Выделите нужный файл. dmp и нажмите Open. Теперь виден добавленный файл дампа, и все готово для начала анализа.

Нажмите кнопку Start Analysis, чтобы выполнить выбранный сценарий. DebugDiag показывает результаты анализа и автоматически сохраняет аналитический отчет в папке DebugDiagReports и открывает его в Internet Explorer. Этот отчет имеет три главных раздела:

В случае сбоя Web-службы публикации World Wide Web Publishing Service мы нашли решение в разделе рекомендаций Analysis summary (см. экран 2).

Приближаясь к решению

Скорее всего, DebugDiag не может решить все проблемы с процессами в Windows, но все же, как правило, этот инструмент предоставляет информацию, которая приближает к решению. Иногда можно получить только имя файла .dll, который вызвал сбой, и узнать его автора. Эти данные уже могут служить основой поиска решения в Internet или в службе технической поддержки.

Майкл Моралес (morales@microsoft.com) — старший инженер службы поддержки Microsoft Global Escalation Services. Специализируется на проблемах отладки и производительности Windows

Поделитесь материалом с коллегами и друзьями

Проверка выполнения кода в режиме отладки

Как я могу проверить, что код выполняется в режиме отладки.

вот что я хотел бы сделать в псевдокоде

3 ответов

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

редактировать, если вы всегда хотите пропустить DoSomething код в отладочной сборке, независимо от того, используется ли отладчик, используйте условная компиляция С #If как то так

что вы имеете в виду в режиме отладки? Если вы ссылаетесь на сборку отладки, вы можете использовать #if DEBUG чтобы проверить, что:

вы можете использовать функцию IsDebuggerPresent

Отладка JavaScript с помощью настоящего отладчика

Новый отладчик JavaScript , встроенный в Firefox , поможет писать код быстро и без ошибок. В последней версии отладчика Firefox мы откроем простое приложение, а затем запустим debugger.html , использовав клавиатурную комбинацию Option + Cmd + S на Mac или Shift + Ctrl + S в Windows . Отладчик разделён на три панели: панель списка файлов, панель исходного кода и панель инструментов.

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

Перестаньте использовать console.log

В этом примере мы используем debugger.html , чтобы отладить приложение по шагам и найти значение переменной.

Мы можем использовать debugger.html , чтобы заглянуть в исходный код приложения, просто добавив breakpoints . Эти точки говорят отладчику остановить выполнение программы на указанной строке. В этом примере мы добавим breakpoints на строке 13 файла app.js .

Теперь добавьте задачу в список. Код остановится в функции addTodo , и мы сможем залезть в исходный код, чтобы посмотреть введённое значение и многое другое. Наведите курсор на переменную, чтобы увидеть её значение и другие свойства. Вы сможете посмотреть свойства anchors , applets , дочерние элементы и так далее.

Вы также сможете посмотреть всю эту информацию в панели « Области ».

Теперь, когда выполнение скрипта приостановлено, его можно выполнить по шагам, используя кнопки в панели инструментов. Назначение кнопки « Возобновить/Пауза » очевидно. « Перешагнуть через » перешагивает через текущую строку кода, « Зайти в » заходит в вызываемую функцию, а « Выйти из » выполняет скрипт до выхода из текущей функции.

Также можно использовать выражения для отслеживания, чтобы следить за значением переменной. Введите выражение в поле « Выражения для отслеживания «, и отладчик будет следить за ним по мере того, как вы выполняете код по шагам. В примере, приведенном выше, можно добавить выражения « title » и « to-do «, и отладчик выдаст их значения, когда они станут доступны. Это особенно полезно в следующих случаях:

  • Когда выполняете код по шагам и следите за изменением значений;
  • Отлаживаете один и тот же кусок исходного кода несколько раз и хотите оценить одни и те же выражения;

Вы также можете использовать debugger.html , чтобы отладить приложения React/Redux . Вот как это работает:

  • Найдите компонент, который вы хотите отладить.
  • Посмотрите на общий вид компонента ( функции в классе ).
  • Добавьте breakpoints в соответствующие функции.
  • Остановите выполнение и посмотрите на статус и свойства компонента.
  • Стек вызовов упрощён, поэтому вы сможете увидеть код о приложения, чередующийся с кодом фреймворка.

Также debugger.html позволяет увидеть скрытый или сжатый код, который может вызывать ошибки. Это полезно, когда вы имеете дело с популярными фреймворками, вроде React/Redux . Отладчик знает про компоненты, на которых вы остановили выполнение кода, и покажет упрощённый стек вызовов, компонент и свойства.

Инструменты разработчика с открытым исходным кодом

Проект debugger.html был запущен около двух лет назад одновременно с полной переработкой инструментов разработчика, встроенных в Firefox . Мы хотели перестроить инструменты разработчика, используя современные веб-технологии.

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

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

debugger.html построен при помощи React , Redux и Babel . Компоненты React легковесные, тестируемые и легкие в разработке. Мы используем React Storybook для быстрого прототипирования пользовательского интерфейса и документирования общих компонентов.

Наши компоненты протестированы с помощью Jest и Enzyme , что упрощает итерации обновления пользовательского интерфейса. Это упрощает работу с различными JavaScript-фреймворками .

front-end код на Babel позволяет отображать класс компонента и его функции в левой панели. А также фиксировать breakpoints к функциям так, чтобы они не перемещались, когда вы изменяете исходный код.

Действия Redux – это чистый API для пользовательского интерфейса, но они также могут быть использованы для создания отдельного отладчика CLI JS . В хранилище Redux есть селекторы для выбора текущего состояния отладки.

Модульное тестирование вызывает действия Redux и симулирует ответы браузера. Интеграционные тесты отладчика управляют браузером с отладчиком действий Redux . Функциональная архитектура сама по себе разработана так, чтобы быть тестируемой.

Мы полагались на сообщество разработчиков Mozilla на каждом этапе. Проект был размещён на GitHub , и наша команда связывалась с разработчиками по всему миру, чтобы получить их поддержку.

Когда мы начинали, автоматизированное тестирование было критически важным компонентом для разработки в сообществе. Тесты предотвращали регрессию и документировали поведение, которое легко можно было пропустить. Поэтому одним из шагов, которые мы предприняли, было добавление модульного тестирования действий в Redux и типов Flow для хранилища Redux . Сообщество помогло нам удостовериться, что тесты во Flow и Jest гарантировали, что все файлы задокументированы и протестированы.

Как разработчики, мы верим, что инструменты тем надёжнее, чем больше людей включилось в процесс их создания. Наша основная команда всегда была маленькой ( 2 человека ). Но в среднем в нашей работе принимало участие 15 разработчиков в неделю. Сообщество вносит разнообразие во взглядах, что помогает справляться с возникающими трудностями и создавать функционал, о котором мы и не мечтали. Теперь мы формируем стек вызовов для 24 различных библиотек. Мы также показываем карту привязок в WebPack и Angular в дереве исходного кода.

Мы планируем переместить все инструменты разработчика Firefox на GitHub , чтобы они могли быть использованы и улучшены широкой аудиторией.

Мы будем рады вашему участию. Зайдите на страницу проекта debugger.html на GitHub , чтобы начать. Мы создали подробные инструкции, чтобы помочь запустить отладчик на вашем компьютере. Используйте его, чтобы выполнять отладку JavaScript-кода для чего угодно: браузеров, терминалов, серверов, смартфонов, роботов. И, если вы видите, как его можно улучшить, дайте нам знать через GitHub .

Вы можете загрузить текущую версию Firefox (и инструментов разработчика) здесь .

Данная публикация представляет собой перевод статьи « Debugging JavaScript With A Real Debugger You Did Not Know You Already Have » , подготовленной дружной командой проекта Интернет-технологии.ру

Debugging — Как проверить скорость выполнения кода?

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

Когда необходим отладчик?

Отладчик помогает вам понять, почему фрагменты вашего кода:

  • не выполняются так, как это ожидается;
  • не выполняются тогда, когда это ожидается;
  • выполняются тогда, когда это не ожидается.

Отладчик приостанавливает выполнение кода, позволяет создать резервную копию блоков кода и повторить их, а также дает возможность проанализировать ваш код с разных сторон, чтобы понять:

  • как обработчик JavaScript получает к нему доступ;
  • какие значения имеют определенные переменные в ходе выполнения;
  • что происходит на каждом этапе выполнения.

Запуск отладчика

Загрузите проблемную веб-страницу в Internet Explorer 11 и откройте средства разработчика F12, нажав клавишу F12 или выбрав пункт Средства разработчика F12 в меню Сервис. Чтобы открыть средство отладки, щелкните значок отладчика или нажмите CTRL+3.

Структура отладчика

В структуре отладчика по умолчанию отображаются три области с регулируемой шириной и высотой.

  • Область сценариев (слева) показывает исходный код HTML и JavaScript веб-страницы в интерфейсе с вкладками. В области полосы прокрутки в области сценариев также выделяется расположение точек останова и совпадения условий поиска.
  • В области Контрольные значения (в правом верхнем углу) отображаются значения переменных. В режиме приостановки выполнения здесь показаны локальные переменные для текущего расположения в коде, которые называются локальные, и определенные отслеживаемые переменные, которые называются контрольные значения.
  • Область стека вызовов и точек останова в правом нижнем углу содержит:
    • Стек вызовов. Этот режим показывает цепочку вызовов функций, которые ведут к текущей точке выполнения. Например, если функция a() вызвала функцию b(), которая вызвала функцию c(), а выполнение было приостановлено в c(), будет показан путь от a() к b() и далее к c().
    • Точки останова. Этот режим показывает список заданных точек останова и точек трассировки и предоставляет функции для удаления, включения или выключения, а также изменения точек останова.


Щелкните значок консоли (рядом со значком справки в верхней части средств F12) или нажмите CTRL+`, чтобы открыть четвертую область, Консоль, ниже области сценариев. Открывайте ее, если вам нужно просмотреть вывод консоли или использовать командную строку консоли.

Запуск сеанса отладки

Есть три способа начать сеанс отладки.

  • Установка точки останова. Когда выполнение кода доходит до этой точки, вы входите в режим приостановки выполнения и можете начать выполнять код шаг за шагом.
  • Инициирование прерывания в коде. Щелкните значок Прервать (две вертикальные параллельные линии) в верхней части средства или нажмите клавиши CTRL+SHIFT+B. Отладчик остановит код при выполнении следующего оператора.
  • Установите для управления исключениями возможность остановки выполнения при неперехваченных исключениях и выполняйте код вашей веб-страницы, пока не будет совпадения с исключением.

Новое средство Internet Explorer 11 — отладчик — выполняет отладку без необходимости обновлять страницу и с сохранением состояния. При этом средства F12 могут оставаться подключенными к окну браузера.

Управление потоком сеанса

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

Значки (слева направо):

  • Продолжить (F5 или F8). Выход из режима приостановки выполнения и продолжение выполнения до следующей точки останова. В накопительном пакете обновления для системы безопасности Internet Explorer (KB2976627) добавлена новая возможность: удерживание клавиши F5 будет перемещать предыдущие разрывы, пока клавиша не будет отпущена.
  • Прервать (CTRL+SHIFT+B). Остановка при выполнении следующего оператора.
  • Шаг с заходом (F11). Заход в вызываемую функцию или переход к следующему оператору при отсутствии функции.
  • Шаг с обходом (F10). Обход вызываемой функции или переход к следующему оператору при отсутствии функции.
  • Шаг с выходом (SHIFT+F11). Выход из текущей функции и заход в вызывающую функцию.
  • Останавливать при новом рабочем процессе (CTRL+SHIFT+W). Остановка выполнения при создании нового рабочего веб-процесса.
  • Управление исключениями (CTRL+SHIFT+E).

По умолчанию исключения игнорируются и просто регистрируются в журнале Консоли. Можно прерывать выполнение всех исключений или только тех, которые не обрабатываются обработчиками исключений try. catch в вашем коде.

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

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

  • Показать следующий оператор. Помещает выделение на следующий оператор, который следует выполнить при помощи команды Шаг с заходом.
  • Выполнить до текущей позиции (CTRL+F10). Возобновляет выполнение и прерывает его в том месте кода, где находится курсор, если прерывание в этом месте допустимо.
  • Следующий оператор (CTRL+SHIFT+F10). Позволяет пропускать операторы в функции без необходимости выходить из них, что похоже на создание временных комментариев для операторов. Кроме того, вы можете перейти назад к оператору, который уже был выполнен. При этом вы не будете перематывать веб-страницу назад. Вы просто повторяете код с этой точки.

Форматирование кода для удобочитаемости

Два значка справа от значка Управление исключениями облегчают чтение больших блоков кода в области сценариев.

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

Файлы соответствия источника

В Windows 8.1 с обновлением появилась поддержка файлов соответствия источника.

Если вы написали код на языке, который компилируется в JavaScript, или использовали программу сокращения кода JavaScript, то код, выполняющийся в браузере, будет сильно отличаться от написанного кода. Это может сильно усложнить отладку. Даже сокращенный код, удобочитаемость которого была улучшена с помощью функции Качественная печать, может иметь имена функций и переменных, которые сильно отличаются от имен в вашем исходном коде. Отладка значительно упрощается, когда ошибки указывают на места, в которых есть проблемы в вашем исходном коде, а не на сильно измененный файл, выполняющийся в браузере.

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

Как включить функцию соответствия источника? Компиляторы или программы сокращения кода, создающие JavaScript, содержат комментарий с именем файла соответствия источника. Например, если myfile.js был сжат до myfile.min.js с помощью программы сокращения кода, поддерживающей функцию соответствия источника, будет создан файл соответствия myfile.min.js.map . В файл myfile.min.js добавляется комментарий такого вида:

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

В накопительном пакете обновления для системы безопасности Internet Explorer (KB2976627) добавлена новая возможность выбора соответствия источника для файла. Чтобы найти этот параметр, щелкните правой кнопкой мыши соответствующую вкладку файла. Это полезно для кода, комментарии которого были очищены.

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

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

Цукерберг рекомендует:  Data Science научный подход к данным

Установка точек останова и управление ими

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

    Обычные точки останова легче всего установить, если в строке один оператор. Щелкните рядом с номером строки в крайнем слева затененном поле в области сценариев. Появится точка, которая означает, что точка останова задана.

В строке с несколькими операторами можно задавать точки останова для отдельных операторов. Щелкните оператор правой кнопкой мыши и задайте точку останова из контекстного меню или поместите курсор внутри оператора и нажмите клавишу F9.

Условные точки останова прерывают выполнение, только если условие, которое вы задали, будет выполнено. Например, предположим, что в вашем коде есть переменная students и вы хотите прервать выполнение, только когда значение students будет больше 20.

Щелкните точку останова или оператор правой кнопкой мыши и выберите пункт Условие в контекстном меню или нажмите клавиши ALT+F9. В диалоговом окне условия введите students > 20 и отправьте условие. В точке останова появится символ A +, и выполнение кода будет прервано, только когда условие students > 20 будет выполнено.

Точки трассировки — новая возможность в Internet Explorer 11. Они работают, как временные команды console.log().

Чтобы установить такую точку, щелкните оператор правой кнопкой мыши и выберите в контекстном меню пункт Вставить точку трассировки. В диалоговом окне введите сообщение в том же формате, который вы бы использовали для аргумента команды console.log() . Точка имеет доступ к тем же локальным и глобальным переменным, что и выбранный вами оператор.

Точки останова и трассировки событий теперь добавлены в накопительном пакете обновления для системы безопасности Internet Explorer (KB2976627). Они работают как точки останова и точки трассировки, описанные выше, но не активируются, когда выполняется определенный блок кода, а приводятся в действие конкретными событиями. Каждая имеет дополнительный условный фильтр, который поможет сузить их область до конкретного экземпляра события, которое необходимо протестировать. Их можно добавлять с помощью значков Добавить точку останова события и Добавить точку трассировки события, выделенных на изображении ниже.

Область «Точки останова»

Помимо того, что точки останова отображаются рядом с операторами в области сценариев, весь набор этих точек показан в области Точки останова.

Вы можете управлять несколькими точками в области Точки останова. Чтобы включить, выключить или удалить все точки, щелкните правой кнопкой мыши в любом месте области и выберите соответствующую команду в контекстном меню. Те же команды доступны в виде значков в правом верхнем углу области, а также слева и справа от отдельных точек останова. Щелкнув любую отдельную точку останова правой кнопкой мыши, вы увидите контекстное меню с командой Условие или Трассировка сообщения, которые позволяют изменить сообщение или сделать точку останова условной.

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

В Windows 8.1 с обновлением точки останова сохраняются и не пропадают после закрытия браузера. Это значит, что их не нужно задавать каждый раз, когда вы открываете браузер для отладки, однако после отладки вам, возможно, понадобится удалить их вручную. Самый простой способ — открыть файл сценария и щелкнуть значок Удалить все в правой верхней части области Точки останова.

В накопительном пакете обновления для системы безопасности Internet Explorer (KB2976627) добавлена новая возможность: можно выбрать несколько точек останова, используя методы CTRL + ЩЕЛЧОК МЫШЬЮ, SHIFT + ЩЕЛЧОК МЫШЬЮ или CTRL + A.

Проверка объектов и переменных

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

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

Выберите пункт Добавить контрольное значение в нижней части наложения, чтобы добавить переменную или объект в область Контрольные значения.

  • Узел локальные в области Контрольные значения предоставляет каталог всех объектов и переменных (как в локальной, так и в глобальной области), доступных оператору, который является фокусом текущего прерывания. Это помогает определить переменные, которые находятся не в той области.
  • Переменные или объекты, добавляемые в область Контрольные значения с помощью команды Добавить контрольное значение, отображаются под узлом локальные и отслеживаются на каждом шаге в режиме приостановки выполнения, даже если текущая точка останова находится в другой области. В накопительном пакете обновления для системы безопасности Internet Explorer (KB2976627) добавлена новая возможность: функции автозаполнения предлагают варианты известных переменных при добавлении контрольных значений.
  • Довольно часто функция может вызываться неожиданно. Это может привести к повреждению данных и проблемам со скоростью работы. Область Стек вызовов показывает маршрут, по которому обработчик JavaScript получает доступ к функции. Текущая функция показана вверху, а вызывающие функции отображаются под ней в обратном порядке.
  • Еще сложнее выполнить трассировку, если функция вызывается асинхронно. В накопительном пакете обновления для системы безопасности Internet Explorer (KB2976627) добавлена новая возможность: на панели Стек вызовов отображаются асинхронные корни вызова.

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

    Управление несколькими сценариями

    Область сценариев в отладчике Internet Explorer 11 предоставляет интерфейс с вкладками, в котором можно выбирать открытые файлы, щелкая их вкладки, и быстро перемещаться по открытым вкладкам с помощью клавиш CTRL+TAB.

    Вы можете открыть файлы, щелкнув значок папки или нажав клавиши CTRL+O для открытия списка файлов. В списке файлов документы сгруппированы по узлам под основным документом фрейма или окна, в котором они выполняются. Наведите указатель мыши на отдельный файл, чтобы показать его полный универсальный код ресурса (URI).

    Рабочие веб-процессы отображаются в узлах, отдельных от документов, которые их создали. Элементы Iframe отображаются как дочерние узлы основного документа.

    С помощью поля Введите условия фильтра в верхней части списка файлов можно отфильтровать доступные файлы по имени файла. Чтобы выполнить текстовый поиск по доступным файлам, используйте поле Найти в файлах (CTRL+F) в правом верхнем углу средств разработчика F12. Если текст найден, открывается первый файл, в котором присутствуют совпадения с искомым текстом и совпадения в этом файле отмечены на полосе прокрутки области сценариев. Нажмите F3, чтобы перейти к следующему совпадению поиска.

    Новая возможность в Windows 8.1 с обновлением: список файлов, которые вы открываете во время отладки веб-страницы, записывается, когда вы покидаете страницу или закрываете браузер. Когда вы возвращаетесь на веб-страницу, файлы, которые были открыты раньше, снова открываются в отладчике.

    Только мой код

    «Только мой код» — это новая функция в Windows 8.1 с обновлением, позволяющая помечать определенные сценарии как сторонние библиотеки, которые нужно пропускать при отладке. В результате отладчик не будет заходить в код, который писали не вы и который вы не планируете изменять.

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

    • Поместите указатель мыши над именем файла в списке файлов в области сценариев. Рядом с именем файла появится значок Только мой код. Щелкните значок или нажмите клавиши CTRL+L, чтобы включить или отключить его.
    • Щелкните правой кнопкой мыши вкладку сценариев в верхней части области и выберите пункт «Библиотечный код» в контекстном меню.
    • Щелкните правой кнопкой мыши элемент Стек вызовов и выберите пункт «Библиотечный код» в контекстном меню, чтобы пометить его родительский сценарий как библиотечный код.

    Значок Только мой код на панели значков отладчика выступает в качестве переключателя, который добавляет или исключает все файлы, помеченные как библиотечный код. Когда функция Только мой код включена и библиотечный код является частью стека вызовов во время приостановки выполнения, то значок Только мой код в правом верхнем углу области Стек вызовов позволяет включать и отключать подробности кадра выполнения. Дважды щелкните строку «[Библиотечный код]» в области Стек вызовов, чтобы развернуть ее подробности.

    Функция «Только мой код» сохраняет состояние библиотек между сеансами. Это реализуется с помощью JSON-файлов, расположенных в %APPDATA%\..\LocalLow\Microsoft\F12\header\MyCode.json и %APPDATA%\..\Local\Microsoft\F12\header\MyCode.json.

    Вы можете изменить эти файлы, чтобы сохранить список по умолчанию или добавить подстановочные знаки для типа домена или файла. Например, выражение *.min.js используется, чтобы автоматически пометить как библиотечный код все файлы, оканчивающиеся на .min.js .

    Отладка и просмотр InPrivate

    Просмотр InPrivate позволяет просматривать Интернет, не оставляя постоянных следов в журнале браузера, однако если во время просмотра InPrivate ведется отладка, то отладчик может сохранять некоторую информацию.

    Отладчик сохраняет информацию о страницах и файлах, проходящих отладку, когда вы добавляете точку останова в файле, помечаете файл как библиотечный код с помощью функции «Только мой код» или открываете в отладчике файл, который не является корневой страницей (например, внешний файл CSS или JavaScript). Эти данные сохраняются, чтобы предоставлять функции отладки между сеансами. Они хранятся независимо от журнала браузера и не очищаются в конце сеанса просмотра InPrivate.

    Если эти данные требуется удалить по соображениям конфиденциальности, вы можете очистить все установленные точки останова, закрыть все файлы, открытые в отладчике, и удалить параметры функции «Только мой код», удалив файлы из папок %APPDATA%\LocalLow\Microsoft\F12\header\MyCode.json и %APPDATA%\Local\Microsoft\F12\header\MyCode.json.

    Не выполняйте отладку вместе с профилированием

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

    Отладка — Debugging


    Отладка это процесс поиска и решения дефектов или проблем в рамках компьютерной программы , которые мешают правильной работе программного обеспечения или системы .

    содержание

    Происхождение термина

    Термины «ошибка» и «отладка» в народе приписывается адмиралу Грейс Хоппер в 1940 — х годах. Несмотря на то , что она работает на Mark II компьютер в Гарвардском университете, ее коллеги обнаружили моли застряли в эстафете и тем самым препятствуя операции, после чего она отметила , что они были «отладки» системы. Однако термин «ошибка», в смысле «технической ошибки», восходит по крайней мере к 1878 году и Томас Эдисон (см ошибка программного обеспечения для полного обсуждения). Аналогичным образом , термин «отладка» , кажется, была использована в качестве термина в воздухоплавания перед входом в мире компьютеров. Действительно, в интервью Грейс Хоппер отметил , что она не чеканки термина. Моль соответствовать уже существующей терминологии, поэтому она была спасена. Письмо Роберт Оппенгеймер (директор атомного проекта Второй мировой войны бомбы «Манхэттен» в Лос — Аламос, Нью — Мексико) использовал этот термин в письме к д — р Эрнест Лоуренс в Калифорнийском университете в Беркли, от 27 октября 1944, в связи с набором дополнительного технический персонал.

    Оксфордский словарь английского языка запись для «отладки» цитирует термин «отладка» , используемый в качестве ссылки для тестирования самолета двигателя в 1945 статье в журнале Королевского авиационного общества. Статья в «Airforce» (июнь 1945 стр. 50) также относится к отладке, в это время авиационных камер. Хоппера ошибка была обнаружена на 9 сентября 1947 г. Термин не был принят программистами до начала 1950 — х годов. Семенная статья Гилл в 1951 году является самым ранним углубленным обсуждением программных ошибок, но он не использует термин «ошибка» или «отладку». В ACM цифровой библиотеки «s, термин„отладка“впервые используется в трех работах с 1952 ACM национальных собраний. Два из трех используют этот термин в кавычках. К 1963 году «отладки» было достаточно распространенным термином следует упомянуть мимоходом без объяснения на странице 1 CTSS руководства.

    Статья Kidwell в Stalking неуловимого ошибка компьютера обсуждает этимологию «ошибки» и «отладки» более подробно.

    Объем

    Как программное обеспечение и электронные системы стали в целом более сложным, различные методы стандартных отладочных расширили с большим количеством методов для обнаружения аномалий, оценки воздействия, а также расписание программных исправлений или полные обновления к системе. Слова «аномалия» и «несоответствие» может быть использован, как являющийся более нейтральные термины , чтобы избежать слова «ошибка» и «дефект» или «ошибка» , где может быть импликации , что все так называемые ошибки , дефекты или ошибки должны быть зафиксированы (любой ценой). Вместо этого, оценка воздействия может быть сделано , чтобы определить , есть ли изменения , чтобы удалить аномалию (или несоответствие ) будет экономически эффективным для системы, или , возможно, планируется новый релиз может оказать изменение (ы) ненужный. Не все вопросы жизни критически или критически важные в системе. Кроме того , важно , чтобы избежать ситуации , когда изменение может быть более расстраивает пользователей, долгосрочной перспективе, чем жить с известной проблемой (ы) (где «лекарство будет хуже , чем болезнь»). На основании решения о приемлемости некоторых аномалий можно избежать культуру «нулевых дефектов» мандата, где люди могли бы искушением отрицать существование проблем , так что результат будет выглядеть как ноль дефектов . Учитывая проблемы , сопутствующие, такие как оценка воздействия на стоимость по сравнению с -выгодой, а затем более широкие методы отладки будут расширяться , чтобы определить частоту аномалий (как часто один и та же «ошибка» происходит) , чтобы помочь оценить их влияние на систему в целом.

    инструменты

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

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

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

    Некоторые инструменты утверждают , чтобы иметь возможность обнаружить более 300 различных проблем. Существуют как коммерческие и бесплатные инструменты для различных языков. Эти инструменты могут быть чрезвычайно полезны при проверке очень больших исходных деревьев, где это нецелесообразно делать код пошаговые. Типичный пример задачи обнаруженной будет переменная разыменовать , что происходит до того переменной присваивается значение. В качестве другого примера, некоторые такие инструменты выполняют сильную проверку типа , когда язык не требует. Таким образом, они лучше обнаружения вероятных ошибок в коде , который синтаксически корректен. Но эти инструменты имеют репутацию ложных срабатываний, где правильный код помечаются как сомнительные. Старый Unix ворс программа является ранним примером.

    Для отладки электронного оборудования (например, компьютерное оборудование ), а также программное обеспечение низкого уровня (например, БИОС , драйверы устройств ) и прошивки , инструменты , такие как осциллографы , логические анализаторы или в эмуляторы (ICES) часто используются отдельно или в сочетание. ICE может выполнять многие задачи типичного программного отладчика на низкоуровневого программного обеспечения и встроенного программного обеспечения .

    процесс отладки

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

    После того , как ошибка воспроизводится, вход программы , возможно , потребуется упростить , чтобы сделать его проще для отладки. Например, ошибка в компиляторе может сделать это сбой при разборе какой — то большой исходный файл. Однако, после упрощения теста, только несколько строк из исходного файла может быть достаточно , чтобы воспроизвести ту же аварию. Такое упрощение может быть сделано вручную, используя разделяй и властвуй подход. Программист попытается удалить некоторые части оригинального теста и проверить , если проблема все еще существует. При отладке проблемы в GUI , программист может попытаться пропустить некоторые взаимодействия пользователя с оригинальным описанием проблемы и проверить , если остальные действия являются достаточными для ошибок , чтобы появиться.

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

    методы

    • Интерактивная отладка
    • Печать отладки (или трассировки) является актом смотреть (живые или записанные) заявления трассировки, или операторы печати, которые указываютпоток выполнения процесса. Это иногда называют Printf отладки , изза использования PRINTF функции в C. Этот вид отладки был включен по команде TRON в оригинальной версии начинающему-ориентированных BASIC языка программирования. TRON стоял, «след на.» TRON вызвала номера строк каждого BASIC командной строки для печатитак как программа побежала.
    • Удаленная отладка является процесс отладки программы , выполняемой на системе , отличной от отладчика. Для запуска удаленной отладки, отладчик подключается к удаленной системе по каналу связи , например , как в локальной сети. Отладчик может контролировать выполнение программы на удаленной системе и получать информацию о ее состоянии.
    • Отладка Посмертной отладка программы после того, как он уже упал . Связанные методы часто включают в себя различные методы трассировки (например,) и / или анализ дампа памяти (или дампа ядра ) разбитого процесса. Дамп процесса может быть получен автоматически с помощью системы (например, когда процесс прекращается из — за необработанное исключение), или с помощью программатора вставленных инструкций, или вручную при помощи интерактивного пользователем.
    • «Волк забор» Алгоритм: Эдвард Гаусс описал этот простой , но очень полезный и теперь известный алгоритм в 1982 статье для коммуникаций ACM следующим образом : «Там один волк на Аляске, как найти его первый построить забор вниз по середине? государства, ждать волчьи выть, определить , с какой стороны забора он находится. Повторите процесс только на той стороне, пока вы не дойдете до точки , где вы можете увидеть волка.» Это реализуется , например , в Gitсистемы управления версиями , как команда мерзавец Bisect , которая использует вышеуказанный алгоритм для определения того, какие коммят внес определенную ошибку.
    • Delta Debugging — методика автоматизации тестового примера упрощения.
    • Сафф Отжим — методика выделения неудачи в испытании с использованием прогрессивного встраивания частей неисправного теста.

    Отладка для встраиваемых систем

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

    Несмотря на проблему неоднородности , упомянутой выше, некоторые отладчики были разработаны коммерчески, а также научно — исследовательских прототипов. Примеры коммерческих решений приходят от Green Hills Software и Microchip «ы MPLAB-ICD (для внутрисхемного отладчика). Два примера инструментов исследования прототипа являются Aveksha и Flocklab. Они все рычаги функциональность доступны на недорогих встроенных процессорах, на чипе отладки модуля (OCDM), чьи сигналы подвергаются через стандартный интерфейс JTAG . Они протестировали на основе того, как много изменений к приложению необходима и скорость событий, они могут идти в ногу с.

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

    Анти-отладка

    Анти-отладка «осуществление одного или нескольких методов в компьютерном коде , который препятствует попыткам обратного проектирования или отладки целевого процесса». Он активно используется признанными издателями в схемах защиты от копирования , но также используется вредоносными программами , чтобы усложнить его обнаружение и устранение. Методы , используемые в анти-отладки включают в себя:

    • API на основе: проверить наличие отладчика с использованием системной информации
    • Исключение на основе: проверьте, если исключение помехи
    • Процессы и потоки блоки: проверить, были ли манипулировать процессы и потоки блоков
    • Модифицированный код проверки для изменения коды, сделанного обработка отладчика программных точек останова
    • Оборудование- и на основе регистров: проверка аппаратных точек останова и регистры процессора
    • Сроки и время ожидания: проверить время, затраченное на выполнение инструкций
    • Обнаружение и наказание отладчика

    Ранний пример анти-отладка существовал в ранних версиях Microsoft Word , который, если был обнаружен отладчик, произвели сообщение , что сказал, «Дерево зла несет горькие плоды. Теперь громя программу диска.», После чего он вызвал дискету диск , чтобы излучать тревожные шумы с намерением отпугивания пользователя от попытки его снова.

    Принципы отладки для начинающих How to debug for absolute beginners

    Независимо от обстоятельств код, создаваемый разработчиками программного обеспечения, далеко не всегда работает так, как задумано. Without fail, the code we write as software developers doesn’t always do what we expected it to do. В некоторых случаях все идет совершенно не по плану! Sometimes it does something completely different! В подобных ситуациях необходимо выяснить, почему так происходит. При этом вместо многочасового изучения кода в поисках ошибок гораздо проще и эффективнее будет использовать средство отладки (отладчик). When this happens, the next task is to figure out why, and although we might be tempted to just keep staring at our code for hours, it’s much easier and efficient to use a debugging tool, or debugger.

    К сожалению, отладчик не является той волшебной палочкой, по мановению которой будут выявлены абсолютно все проблемы в коде. A debugger, unfortunately, isn’t something that can magically reveal all the problems or “bugs” in our code. Процесс отладки подразумевает пошаговое выполнение кода в средстве отладки (например, в Visual Studio) в поисках точки, в которой вы допустили ошибку при написании программы. Debugging means to run your code step by step in a debugging tool like Visual Studio, to find the exact point where you made a programming mistake. Таким образом, вы получите возможность проанализировать код и внести в него необходимые исправления. При этом средства отладки часто допускают внесение временных изменений, благодаря чему вы можете продолжать выполнение программы. You then understand what corrections you need to make in your code, and debugging tools often allow you to make temporary changes so you can continue running the program.

    Эффективное использование отладчика также требует определенных навыков, которые вырабатываются только с практикой, однако умение работать с ним является основополагающим требованием к любому разработчику программного обеспечения. Using a debugger effectively is also a skill that takes time and practice to learn but is ultimately a fundamental task for every software developer. В этой статье мы познакомим вас с основными принципами отладки и поделимся рекомендациями о том, с чего можно начать. In this article, then, we introduce the core principles of debugging and provide tips to get you started.

    Проанализируйте проблему, задавая себе правильные вопросы Clarify the problem by asking yourself the right questions

    Это поможет вам выяснить, в чем состоит проблема, прежде чем приступать к ее решению. It helps to clarify the problem that you ran into before you try to fix it. Мы полагаем, что вы уже сталкивались с проблемами в коде, иначе вряд ли читали бы сейчас эту статью в поисках советов по его отладке! We expect that you already ran into a problem in your code, otherwise you wouldn’t be here trying to figure out how to debug it! Итак, прежде чем начать отладку, проанализируйте проблему, которую вы пытаетесь решить: So, before you start debugging, make sure you’ve identified the problem you’re trying to solve:

    Что именно должен был выполнить код? What did you expect your code to do?

    Что произошло вместо этого? What happened instead?

    Если во время выполнения приложения вы столкнулись с ошибкой или исключением, это может быть хорошим признаком! If you ran into an error (exception) while running your app, that can be a good thing! Исключение возникает в том случае, если при выполнении кода происходит непредвиденное событие (как правило, это ошибка какого-либо рода). An exception is an unexpected event encountered when running code, typically an error of some kind. С помощью средства отладки вы можете перейти точно к тому месту в коде, где возникло исключение, и исследовать возможные способы исправления ситуации. A debugging tool can take you to the exact place in your code where the exception occurred and can help you investigate possible fixes.

    Если произошло что-то еще, каковы признаки проблемы? If something else happened, what is the symptom of the problem? Есть ли у вас предположения относительно того, в каком месте кода возникла проблема? Do you already suspect where this problem occurred in your code? Например, если код должен выводить какой-то текст, но при этом текст содержит ошибки, вы можете сделать вывод, что в этом случае используются неверные данные или код вывода текста содержит ошибки другого рода. For example, if your code displays some text, but the text is incorrect, you know that either your data is bad or the code that set the display text has some kind of bug. При пошаговом выполнении кода в отладчике вы можете изучить каждое изменение переменных и точно определить, когда и каким образом были присвоены неверные значения. By stepping through the code in a debugger, you can examine each and every change to your variables to discover exactly when and how incorrect values are assigned.

    Проверьте свои предположения Examine your assumptions

    Прежде чем исследовать причины возникновения ошибки, проверьте предположения, на основании которых вы ожидаете тот или иной результат. Before you investigate a bug or an error, think of the assumptions that made you expect a certain result. Скрытые или неизвестные предположения могут помешать выявлению проблемы, даже если вы изучаете непосредственно место ее возникновения в отладчике. Hidden or unknown assumptions can get in the way of identifying a problem even when you are looking right at the cause of the problem in a debugger. Перечень возможных предположений может быть достаточно большим. You may have a long list of possible assumptions! Чтобы проверить их, задайте себе несколько вопросов. Here are a few questions to ask yourself to challenge your assumptions.

    Используете ли вы нужный API (то есть соответствующие объект, функцию, метод или свойство)? Are you using the right API (that is, the right object, function, method, or property)? Возможно, используемый вами API работает не так, как вы ожидаете. An API that you’re using might not do what you think it does. (После проверки вызова API в отладчике для исправления проблемы и выявления нужного API вам может потребоваться обратиться к документации.) (After you examine the API call in the debugger, fixing it may require a trip to the documentation to help identify the correct API.)

    Правильно ли вы используете API? Are you using an API correctly? Даже если вы выбрали нужный API, он может использоваться неправильно. Maybe you used the right API but didn’t use it in the right way.

    Нет ли в вашем коде опечаток? Does your code contain any typos? Некоторые опечатки, например ошибки в написании имени переменной, могут быть незаметными, особенно при работе с языками, в которых не требуется объявление переменных перед их использованием. Some typos, like a simple misspelling of a variable name, can be difficult to see, especially when working with languages that don’t require variables to be declared before they’re used.

    Вносили ли вы изменения в код и могут ли они быть связаны с возникшей проблемой? Did you make a change to your code and assume it is unrelated to the problem that you’re seeing?

    Должны ли объект или переменная содержать определенное значение (или определенный тип значения) и соответствует ли это действительности? Did you expect an object or variable to contain a certain value (or a certain type of value) that’s different from what really happened?

    Известно ли назначение кода? Do you know the intent of the code? Как правило, отладка кода, написанного другим разработчиком, дается гораздо сложнее. It is often more difficult to debug someone else’s code. Если это не ваш код, возможно, для его эффективной отладки вам потребуется изучить, что он делает. If it’s not your code, it’s possible you might need to spend time learning exactly what the code does before you can debug it effectively.

    При написании кода старайтесь начинать с небольших и гарантированно работающих фрагментов! When writing code, start small, and start with code that works! (В этом вам может помочь хороший пример кода.) В некоторых случаях для исправления большого сложного фрагмента кода можно начать с маленького сегмента, демонстрирующего основную задачу, которую требуется выполнить. (Good sample code is helpful here.) Sometimes, it is easier to fix a large or complicated set of code by starting with a small piece of code that demonstrates the core task you are trying to achieve. Затем вы можете последовательно изменять или добавлять код в поисках точки возникновения ошибки. Then, you can modify or add code incrementally, testing at each point for errors.

    Анализируя собственные предположения, вы можете сократить время, необходимое на поиск проблем в коде. By questioning your assumptions, you may reduce the time it takes to find a problem in your code. Кроме того, вы можете ускорить решение самих проблем. You may also reduce the time it takes to fix a problem.

    Используйте режим пошагового выполнения во время отладки для поиска места возникновения проблемы. Step through your code in debugging mode to find where the problem occurred

    Очевидно, что ошибки и неверные результаты можно увидеть только после выполнения кода приложения. When you normally run an app, you see errors and incorrect results only after the code has run. Кроме того, работа программы может завершиться неожиданно без каких-либо сообщений. A program might also terminate unexpectedly without telling you why.

    При выполнении приложения в отладчике (в так называемом режиме отладки) осуществляется активный мониторинг всего, что происходит во время работы программы. Running an app within a debugger, also called debugging mode, means that the debugger actively monitors everything that’s happening as the program runs. Кроме того, вы можете в любой точке приостановить работу приложения, исследовать его состояние и при необходимости перейти в режим пошагового выполнения, чтобы изучить необходимые строки кода более детально. It also allows you to pause the app at any point to examine its state, and to then step through your code line by line to watch every detail as it happens.

    Чтобы перейти в режим отладки в Visual Studio, необходимо нажать клавишу F5 (также вы можете выбрать пункт меню Отладка > Начать отладку или нажать кнопку Начать отладку в панели инструментов «Отладка»). In Visual Studio, you enter debugging mode by using F5 (or the Debug > Start Debugging menu command or the Start Debugging button in the Debug Toolbar). Если возникает исключение, помощник по исправлению ошибок Visual Studio направит вас к точке его появления и предоставит другую необходимую информацию. If any exceptions occur, Visual Studio’s Exception Helper takes you to the exact point where the exception occurred and provides other helpful information. См. дополнительные сведения об обработке исключений в коде в разделе Приемы и инструменты отладки. For more information on how to handle exceptions in your code, see Debugging techniques and tools.

    Если исключение не возникает, возможно, вам следует проанализировать определенные места в коде, которые могут являться источником проблемы. If you didn’t get an exception, you probably have a good idea where to look for the problem in your code. На этом этапе следует использовать точки останова в отладчике, благодаря которым вы сможете исследовать код более внимательно. This is where you use breakpoints with the debugger to give yourself a chance to examine your code more carefully. Точки останова — это один из самых простых и важных компонентов надежной отладки. Breakpoints are the most basic and essential feature of reliable debugging. Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных, поведение памяти или последовательность выполнения кода. A breakpoint indicates where Visual Studio should pause your running code so you can take a look at the values of variables, or the behavior of memory, or the sequence in which code runs.

    Чтобы задать точку останова в Visual Studio, достаточно щелкнуть в левом поле рядом с интересующей вас строкой кода. In Visual Studio, you can quickly set a breakpoint by clicking in the left margin next to a line of code. Также для этого можно поместить указатель мыши в нужную строку и нажать клавишу F9. Or place the cursor on a line and press F9.

    Чтобы продемонстрировать это, мы рассмотрим пример кода, который уже содержит несколько ошибок. To help illustrate these concepts, we take you through some example code that already has several bugs. В этом случае мы используем C#, однако функции отладки также работают для Visual Basic, C++, JavaScript, Python и других поддерживаемых языков. We are using C#, but the debugging features apply to Visual Basic, C++, JavaScript, Python, and other supported languages.

    Создание образца приложения с ошибками Create a sample app (with some bugs)

    Сейчас мы создадим приложение, которое содержит некоторые ошибки. Next, we will create an application that has a few bugs.

    Для этого вам потребуется установленная среда Visual Studio с рабочими нагрузками Разработка классических приложений .NET или Кроссплатформенная разработка .NET Core (в зависимости от того, приложение какого типа вы создаете). You must have Visual Studio installed and either the .NET desktop development workload or the .NET Core cross platform development workload installed, depending on which app type you want to create.

    Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio , если вы еще не сделали этого. If you haven’t already installed Visual Studio, go to the Visual Studio downloads page to install it for free.

    Если у вас уже установлена среда Visual Studio без нужных рабочих нагрузок, щелкните Сервис > Получить средства и компоненты. If you need to install the workload but already have Visual Studio, click Tools > Get Tools and Features. Запускается Visual Studio Installer. The Visual Studio Installer launches. Выберите рабочую нагрузку Разработка классических приложений .NET или Кроссплатформенная разработка .NET Core, а затем щелкните Изменить. Choose the .NET desktop development (or .NET Core cross platform development) workload, then choose Modify.


    Запустите Visual Studio. Open Visual Studio.

    На начальном экране выберите Создать проект. On the start window, choose Create a new project. Введите консоль в поле поиска и выберите Консольное приложение (.NET Framework) или Консольное приложение (.NET Core). Type console in the search box and then choose Console App (.NET Framework) or Console App (.NET Core). Нажмите кнопку Далее. Choose Next. Введите имя проекта, например ConsoleApp-FirstApp, и нажмите кнопку Создать. Type a project name like ConsoleApp-FirstApp and click Create.

    В верхней строке меню выберите Файл > Создать > Проект. From the top menu bar, choose File > New > Project. В левой области диалогового окна Новый проект в разделе Visual C# выберите Консольное приложение, а затем в средней области выберите Консольное приложение (.NET Framework) или Консольное приложение (.NET Core). In the left pane of the New project dialog box, under Visual C#, choose Console App, and then in the middle pane choose either Console App (.NET Framework) or Console App (.NET Core). Введите такое имя, как ConsoleApp-FirstApp, и нажмите кнопку ОК. Type a name like ConsoleApp-FirstApp and click OK.

    Если шаблон проекта Консольное приложение (.NET Framework) или Консольное приложение (.NET Core) отсутствует, перейдите в меню Сервис > Получить средства и компоненты, после чего запустится Visual Studio Installer. If you don’t see the Console App (.NET Framework) or Console App (.NET Core) project template, go to Tools > Get Tools and Features, which opens the Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений .NET или Кроссплатформенная разработка .NET Core, а затем выберите Изменить. Choose the .NET desktop development workload or the .NET Core cross platform development workload, then choose Modify.

    Visual Studio создаст консольный проект и откроет его в обозревателе решений (правая область). Visual Studio creates the console project, which appears in Solution Explorer in the right pane.

    Откройте файл Program.cs и замените все его содержимое по умолчанию следующим кодом. In Program.cs, replace all the default code with the following code:

    Этот код выводит список, содержащий название галактики, расстояние до нее, а также тип галактики. Our intent for this code is to display the galaxy name, the distance to the galaxy, and the galaxy type all in a list. При отладке важно учитывать предназначение кода. To debug, it is important to understand the intent of the code. Ниже показан формат одной строки списка, который должен выводить код. Here is the format for one line from the list that we want to show in the output:

    название галактики, расстояние, тип галактики. galaxy name, distance, galaxy type.

    Запуск приложения Run the app

    Нажмите клавишу F5 или кнопку Начать отладку в панели инструментов «Отладка», которая расположена над редактором кода. Press F5 or the Start Debugging button in the Debug Toolbar, located above the code editor.

    По результатам запуска приложения отладчик не демонстрирует никаких исключений. The app starts and there are no exceptions shown to us by the debugger. Тем не менее данные, выводимые в окно консоли, не соответствуют ожиданиям. However, the output you see in the console window is not what you expect. Вот, что мы должны были увидеть. Here is the expected output:

    Вместо этого выводятся следующие данные. But, we see this instead:

    Проанализировав выходные данные и код, мы можем сделать вывод, что в классе GType содержится тип галактики. Looking at the output and at our code, we know that GType is the name of the class that stores the galaxy type. Нам необходимо выводить на экран тип галактики (например, Spiral), а не название класса. We are trying to show the actual galaxy type (such as «Spiral»), not the class name!

    Отладка приложения Debug the app

    Во время выполнения приложения щелкните в левом поле рядом с вызовом метода Console.WriteLine , чтобы задать точку останова в этой строке кода. With the app still running, set a breakpoint by clicking in the left margin next to the Console.WriteLine method call in this line of code.

    В месте установки точки останова в левом поле появится красный круг. When you set the breakpoint, a red dot appears in the left margin.

    Поскольку возникшая проблема связана с выходными данными, необходимо начать отладку с проверки кода, который выполняется перед установкой выходных данных. Because we see a problem in the output, we will start debugging by looking at the preceding code that sets the output in the debugger.

    Нажмите кнопку Перезапустить на панели инструментов отладки (CTRL + SHIFT + F5). Click the Restart button in the Debug Toolbar (Ctrl + Shift + F5).

    Выполнение приложения приостановится в заданной точке останова. The app pauses at the breakpoint that you set. Место приостановки отладчика будет выделено желтым цветом (при этом желтая строка кода на этот момент не выполнена). The yellow highlighting indicates where the debugger is paused (the yellow line of code has not yet executed).

    Наведите указатель мыши на переменную GalaxyType справа. После этого разверните theGalaxy.GalaxyType слева от значка гаечного ключа. Hover over the GalaxyType variable on the right, and then, to the left of the wrench icon, expand theGalaxy.GalaxyType . Как вы можете видеть, GalaxyType содержит свойство MyGType , которому присваивается значение Spiral . You see that GalaxyType contains a property MyGType , and the property value is set to Spiral .

    Изначально вы ожидаете, что в окно консоли будет выведено именно значение Spiral. «Spiral» is actually the correct value you were expecting to print to the console! Таким образом, вам следует проверить это значение в коде во время выполнения приложения. So it is a good start that you can access this value in this code while running the app. В этом сценарии мы используем неправильный API. In this scenario, we are using the incorrect API. Посмотрим, сможем ли мы исправить проблему во время выполнения кода в отладчике. We will see if we can fix this while running code in the debugger.

    Во время отладки этого же кода установите указатель мыши в конец элемента theGalaxy.GalaxyType и измените его на theGalaxy.GalaxyType.MyGType . In the same code, while still debugging, put your cursor at the end of theGalaxy.GalaxyType and change it to theGalaxy.GalaxyType.MyGType . Несмотря на допустимость такого изменения, в редакторе кода отображается ошибка, свидетельствующая о невозможности выполнить компиляцию. Although you can make this change, the code editor shows you an error indicating it can’t compile this code.

    Щелкните Изменить в окне сообщения Изменить и продолжить. Click Edit in the Edit and Continue message box. Сообщение об ошибке будет выведено в окне Список ошибок. You see an error message now in the Error List window. Эта ошибка указывает, что ‘object’ не содержит определение для MyGType . The error indicates that the ‘object’ doesn’t contain a definition for MyGType .

    Несмотря на то что мы задаем каждую галактику с использованием объекта GType (который содержит свойство MyGType ), отладчик не распознает theGalaxy как объект типа GType . Even though we set each galaxy with an object of type GType (which has the MyGType property), the debugger does not recognize the theGalaxy object as an object of type GType . Что происходит? What’s going on? В этом случае необходимо проверить код, который задает тип галактики. You want to look through any code that sets the galaxy type. Вы увидите, что класс GType содержит свойство MyGType , однако все же что-то работает не так. When you do this, you see that the GType class definitely has a property of MyGType , but something isn’t right. Разгадка кроется в сообщении об ошибке для object . Интерпретатор языка воспринимает его как объект object вместо ожидаемого типа GType . The error message about object turns out to be the clue; to the language interpreter, the type appears to be an object of type object instead of an object of type GType .

    Анализируя код, в котором задается тип галактики, вы можете увидеть, что свойство GalaxyType класса Galaxy задается как object вместо GType . Looking through your code related to setting the galaxy type, you find the GalaxyType property of the Galaxy class is specified as object instead of GType .

    Измените предшествующий код на следующий. Change the preceding code to this:

    Нажмите кнопку Перезапустить на панели инструментов отладки (CTRL + SHIFT + F5), чтобы выполнить повторную компиляцию кода и снова запустить его. Click the Restart button in the Debug Toolbar (Ctrl + Shift + F5) to recompile code and restart.

    Когда отладчик приостановит выполнение на строке Console.WriteLine , вы можете навести указатель мыши на theGalaxy.GalaxyType.MyGType и убедиться, что значение задано правильно. Now, when the debugger pauses on Console.WriteLine , you can hover over theGalaxy.GalaxyType.MyGType , and see that the value is properly set.

    Удалите точку останова, щелкнув ее кружок в левом поле (также для этого можно выбрать команду Точка останова > Удалить точку останова). После этого нажмите клавишу F5 для продолжения. Remove the breakpoint by clicking on the breakpoint circle in the left margin (or right-click and choose Breakpoint > Delete Breakpoint), and then press F5 to continue.

    Приложение запускается и отображает выходные данные. The app runs and displays output. Теперь все работает правильно, однако вы можете заметить еще одну неточность. Для галактики Small Magellanic Cloud, которая имеет тип Irregular, в консоли не выводится никакой тип. It looks pretty good now, but you do notice one thing; you expected the Small Magellanic Cloud galaxy to show up as a Irregular galaxy in the console output, but it shows no galaxy type at all.

    Задайте точку останова на этой строке кода. Set a breakpoint on this line of code.

    Здесь задается тип галактики, поэтому нам необходимо изучить эту строку более пристально. This code is where the galaxy type is set, so we want to take a closer look at it.

    Нажмите кнопку Перезапустить на панели инструментов отладки (CTRL + SHIFT + F5), чтобы запустить приложение снова. Click the Restart button in the Debug Toolbar (Ctrl + Shift + F5) to restart.

    Отладчик приостановит работу в строке кода, где вы задали точку останова. The debugger pauses on the line of code where you set the breakpoint.

    Наведите указатель мыши на переменную type . Hover over the type variable. Отображается значение S (после кода символа). You see a value of S (following the character code). Вас интересует значение I , поскольку эта галактика должна иметь тип Irregular. You are interested in a value of I , since you know that is an Irregular galaxy type.

    Нажмите клавишу F5 и снова наведите указатель мыши на переменную type . Press F5 and hover over the type variable again. Повторяйте этот шаг, пока в переменной type не появится значение I . Repeat this step until you see a value of I in the type variable.

    Нажмите клавишу F11 (выберите Отладка > Шаг с заходом или нажмите кнопку Шаг с заходом в панели инструментов «Отладка»). Now, press F11 (Debug > Step Into or the Step Into button in the Debug Toolbar).

    При нажатии клавиши F11 отладчик переходит на одну инструкцию вперед и выполняет соответствующий код. F11 advances the debugger (and executes code) one statement at a time. Клавиша F10 (Шаг с обходом) имеет схожую функцию и также полезна при работе с отладчиком. F10 (Step Over) is a similar command, and both are extremely useful when learning how to use the debugger.

    Нажимайте клавишу F11 до тех пор, пока вы не остановитесь в строке кода с инструкцией switch для значения I. Press F11 until you stop on line of code in the switch statement for a value of ‘I’. Здесь вы увидите очевидную ошибку, связанную с опечаткой. Here, you see a clear problem resulting from a typo. Вы ожидали, что код будет выполнен дальше до места, где для MyGType задается тип Irregular, однако вместо этого отладчик полностью пропускает этот код и приостанавливает работу в разделе default инструкции switch . You expected the code to advance to where it sets MyGType as an Irregular galaxy type, but the debugger instead skips this code completely and pauses on the default section of the switch statement.

    Взглянув на код, вы заметите опечатку в инструкции case ‘l’ . Looking at the code, you see a typo in the case ‘l’ statement. Вместо этого она должна иметь вид case ‘I’ . It should be case ‘I’ .

    Щелкните код case ‘l’ и замените его на case ‘I’ . Click in the code for case ‘l’ and replace it with case ‘I’ .

    Удалите точку останова и нажмите кнопку Перезапустить, чтобы запустить приложение снова. Remove your breakpoint, and then click the Restart button to restart the app.

    Теперь все ошибки исправлены и приложение выдает ожидаемые результаты. The bugs are fixed now and you see the Output you expect!

    Нажмите любую клавишу, чтобы завершить работу приложения. Press any key to finish the app.

    Сводка Summary

    Если вы сталкиваетесь с проблемой, воспользуйтесь отладчиком и командами пошагового выполнения, такими как F10 и F11, для поиска области кода, в которой возникают ошибки. When you see a problem, use the debugger and step commands such as F10 and F11 to find the region of code with the problem.

    Если выявить проблемную область кода не удается, задайте точку останова в коде, который выполняется перед возникновением ошибки, после чего используйте команды пошагового выполнения, пока проблема не проявится. If it is difficult to identify the region of code where the problem occurs, set a breakpoint in code that runs before the problem occurs, and then use step commands until you see the problem manifest. Также вы можете использовать точки трассировки для вывода сообщений в окно вывода. You can also use tracepoints to log messages to the Output window. Анализируя сообщения, которые выводятся в окно или отсутствуют в нем, нередко можно изолировать область кода, где возникает проблема. By looking at logged messages (and noticing which messages were not yet logged!), you can often isolate the region of code with the problem. Для дальнейшего сужения области поиска этот процесс может потребоваться повторить несколько раз. You may have to repeat this process several times to narrow it down.

    Выявив проблемную область кода, используйте отладчик для ее детального анализа. When you find the region of code with the problem, use the debugger to investigate. Чтобы определить причину возникновения проблемы, проверьте код во время выполнения приложения в отладчике. To find the cause of a problem, inspect the problem code while running your app in the debugger:

    Проверьте переменные и убедитесь, что они содержат значения того типа, который вы ожидаете. Inspect variables and check whether they contain the type of values that they should contain. Если переменная содержит недопустимое значение, найдите, где оно было задано. Для этого может потребоваться перезапустить отладчик, проверить стек вызовов или выполнить одновременно оба этих действия. If you find a bad value, find out where the bad value was set (to find where the value was set, you might need to either restart the debugger, look at the call stack, or both).

    Проверьте, выполняет ли ваше приложение код, который вы ожидаете. Check whether your application is executing the code that you expect. (Так, в примере приложения должна была выполняться инструкция switch, устанавливающая тип галактики Irregular, однако нужный код был пропущен из-за опечатки.) (For example, in the sample application, we expected the code for the switch statement to set the galaxy type to Irregular, but the app skipped the code due to the typo.)

    Отладчик представляет собой эффективное средства для выявления ошибок. You use a debugger to help you find bugs. Средство отладки может искать ошибки вместо вас в том случае, если ему известно предназначение кода. A debugging tool can find bugs for you only if it knows the intent of your code. Для этого вы должны указать предназначение. A tool can only know the intent of your code if you, the developer, express that intent. Этого можно добиться с помощью модульных тестов. Writing unit tests is how you do that.

    Следующие шаги Next steps

    Из этой статьи вы узнали общие принципы отладки приложений. In this article, you’ve learned a few general debugging concepts. Теперь вы можете приступить к изучению других возможностей отладчика. Next, you can start learning more about the debugger.

    Как проверить скорость функций в Visual Studio

    Я хотел бы проверить, насколько быстро работают мои проекты. Было бы замечательно, если бы была возможность отмечать медленные места моей функции, поэтому я могу изменить свой код, чтобы повысить производительность. Я использую Microsoft Visual Studio 2012, и я знаю, что есть встроенный инструмент тестирования, но я не знаю, где его найти и, вероятно, как его использовать. Было бы здорово, если бы кто-то помог мне с этой проблемой.

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

    Также в VS 2013 есть встроенный профилировщик в меню ANALYZE => Profiler. Я не помню, в какой версии VS он был добавлен, но я думаю, что он есть в VS 2012. Таким образом, вы можете начать профилирование, некоторое время использовать свое приложение, а затем проверять, какие операции потребовали больше времени для выполнения.

    UPDATE: VS 2020 теперь показывает время выполнения в миллисекундах для каждой строки или когда Run To Click используется во время сеанса отладки:

    В Visual Studio 2013

    В верхнем меню перейдите к ANALYZE → Performance and Diagnostics

    Проверьте мастер производительности, чтобы рассчитать необходимое время. Click- Начало. Теперь выберите — Инструментарий для измерения вызовов функций и подсчета. Нажмите кнопку «Далее. Select- Будет показан один или несколько доступных проектов с таким названием. Нажмите кнопку «Далее. Снова нажмите «Далее». Check- Запустите профилирование после завершения работы мастера. Теперь нажмите кнопку Готово.

    В Visual Studio 2020

    В верхнем меню перейдите к ANALYZE → Performance Profiler

    Проверьте мастер производительности, чтобы рассчитать необходимое время. Click- Начало. Теперь выберите — Инструментарий для измерения вызовов функций и подсчета. Нажмите кнопку «Далее. Select- Будет показан один или несколько доступных проектов с таким названием. Нажмите кнопку «Далее. Снова нажмите «Далее». Check- Запустите профилирование после завершения работы мастера. Теперь нажмите кнопку Готово.

    Однако вы можете также предпочесть использовать командное окно Visual Studio и VSPerfCmd для выполнения профилирования, поскольку у него есть функции, которые нет у Performance Profiler. Смотрите: https://msdn.microsoft.com/en-us/library/dd255376.aspx

    Если вы столкнулись с проблемами при использовании Performance Wizard в Windows 10, см.: Метод выборки ЦП отключен в профилировщике производительности.

    Отладка в браузере Chrome

    Давайте отвлечёмся от написания кода и поговорим о его отладке.

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

    Мы будем использовать браузер Chrome, так как у него достаточно возможностей, в большинстве других браузеров процесс будет схожим.

    Панель «Исходный код» («Sources»)

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

    • Работая в Chrome, откройте тестовую страницу.
    • Включите инструменты разработчика, нажав F12 (Mac: Cmd + Opt + I ).
    • Щёлкните по панели sources («исходный код»).

    При первом запуске получаем следующее:

    Кнопка-переключатель откроет вкладку со списком файлов.

    Кликните на неё и выберите hello.js . Вот что появится:

    Интерфейс состоит из трёх зон:


    1. В зоне Resources (Ресурсы) показаны файлы HTML, JavaScript, CSS, включая изображения, используемые на странице. Здесь также могут быть файлы различных расширений Chrome.
    2. Зона Source показывает исходный код.
    3. Наконец, зона Information and control (Сведения и контроль) отведена для отладки, вскоре мы к ней вернёмся.

    Чтобы скрыть список ресурсов и освободить экранное место для исходного кода, щёлкните по тому же переключателю .

    Консоль

    При нажатии на клавишу Esc в нижней части экрана вызывается консоль, где можно вводить команды и выполнять их клавишей Enter .

    Результат выполнения инструкций сразу же отображается в консоли.

    Например, результатом 1+2 будет 3 , а инструкция hello(«debugger») ничего не возвращает, так что получаем undefined :

    Точки останова (breakpoints)

    Давайте разберёмся, как работает код нашей тестовой страницы. В файле hello.js щёлкните по строчке номер 4 . Да, щёлкайте именно по самой цифре, не по коду.

    Ура! Вы поставили точку останова. А теперь щёлкните по цифре 8 на восьмой линии. Номер строки будет окрашен в синий цвет.

    Вот что в итоге должно получиться:

    Точка останова – это участок кода, где отладчик автоматически приостановит исполнение JavaScript.

    Пока исполнение поставлено «на паузу», мы можем просмотреть текущие значения переменных, выполнить команды в консоли, одним словом, мы выполняем отладку кода.

    В правой части графического интерфейса мы видим список точек останова. А когда таких точек выставлено много, да ещё и в разных файлах, этот список поможет эффективно ими управлять:

    • Быстро переместиться к любой точке останова в коде – нужно щёлкнуть по точке в правой части экрана.
    • Временно деактивировать точку – в общем списке снимите галочку напротив ненужной в данный момент точки.
    • Удалить точку – щёлкните по ней правой кнопкой мыши и выберите Remove (Удалить).
    • …и так далее.

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

    Этот метод используется, когда выполнение кода нужно остановить при присвоении определённого выражения какой-либо переменной или при определённых параметрах функции.

    Команда Debugger

    Выполнение кода можно также приостановить с помощью команды debugger прямо изнутри самого кода:

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

    Остановимся и оглядимся

    В нашем примере функция hello() вызывается во время загрузки страницы, поэтому для начала отладки (после того, как мы поставили точки останова) проще всего её перезагрузить. Нажмите F5 (Windows, Linux) или Cmd + R (Mac).

    Выполнение прервётся на четвёртой строчке:

    Чтобы понять, что происходит в коде, щёлкните по стрелочкам справа:

    Watch показывает текущие значения выражений.

    Нажмите на + и введите выражение. В процессе выполнения отладчик автоматически пересчитывает и выводит его значение.

    Call Stack показывает последовательность вызовов функций.

    В нашем примере отладчик работает с функцией hello() , вызванной скриптом из файла index.html (там нет функции, поэтому вызов «анонимный»).

    При нажатии на элемент списка (например, на «anonymous») отладчик переходит к соответствующему коду, и нам представляется возможность его проанализировать.

    Scope показывает текущие переменные.

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

    В Global перечисляются глобальные переменные (т.е. объявленные за пределами функций).

    Не обращайте пока внимание на ключевое слово this – его мы изучим чуть позже.

    Пошаговое выполнение скрипта

    А теперь давайте пошагаем по нашему коду.

    В правой части панели для этого есть несколько кнопок. Рассмотрим их.

    – продолжить выполнение. Быстрая клавиша – F8 .

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

    Вот, что мы увидим, кликнув на неё:

    Выполнение кода возобновилось, дошло до другой точки останова внутри say() , и отладчик снова приостановил выполнение. Обратите внимание на пункт «Call stack» справа: в списке появился ещё один вызов. Мы теперь внутри функции say() .

    – сделать шаг (выполнить следующую команду), не заходя в функцию. Быстрая клавиша – F10 .

    Если мы нажмём на неё – будет вызван alert . Важно: на месте alert может быть любая другая функция, выполнение просто перешагнёт через неё, полностью игнорируя её содержимое.

    – сделать шаг. Быстрая клавиша – F11 .

    В отличие от предыдущего примера, здесь мы «заходим» во вложенные функции и шаг за шагом проходим по скрипту.

    – продолжить выполнение до завершения текущей функции. Быстрая клавиша – Shift + F11 .

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

    – активировать/деактивировать все точки останова.

    Эта кнопка не влияет на выполнение кода, она лишь позволяет массово включить/отключить точки останова.

    – разрешить/запретить остановку выполнения в случае возникновения ошибки.

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

    Если щёлкнуть правой кнопкой мыши по строчке кода, в контекстном меню можно выбрать опцию «Continue to here» («продолжить до этого места»).

    Этот метод используется, когда нам нужно продвинуться на несколько шагов вперёд до нужной строки, но лень выставлять точки останова.

    Логирование

    Если нужно что-то вывести в консоль из кода, применяется функция console.log .

    К примеру, выведем в консоль значения от нуля до четырёх:

    Обычный пользователь сайта не увидит такой вывод, так как он в консоли. Напомним, что консоль можно открыть через инструменты разработчика – выберите вкладку «Консоль» или нажмите Esc , находясь в другой вкладке – консоль откроется в нижней части интерфейса.

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

    Итого

    Приостановить выполнение скрипта можно тремя способами:

    1. Точками останова.
    2. Использованием в коде команды debugger .
    3. При ошибке (если инструменты разработчика открыты и опция включена).

    При остановке мы можем отлаживать – проанализировать переменные и пошагово пройти по процессу, что поможет отыскать проблему.

    Нами описаны далеко не все инструменты разработчика. С полным руководством можно ознакомиться здесь: https://developers.google.com/web/tools/chrome-devtools.

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

    И, конечно, вы можете просто покликать в разных местах инструментов разработчика. Пожалуй, это наискорейший способ ими овладеть. Не забывайте про правый клик мыши и контекстные меню!

    Замер производительности в отладке 1С 8.3 (8.2)

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

    С помощью этого механизма возможно оценить производительность в разрезе строк программного кода. Рассмотрим использование этого механизма подробнее на конкретном примере.

    Пример использования замера производительности 1С

    Запускаем 1С 8.2 или 8.3 в режиме отладки, устанавливаем точку останова, запускаем режим замера из меню (Отладка — Замер производительности).

    После этого необходимо активировать выполнение данной строчки программного кода. Что мы получаем:

    Получите 267 видеоуроков по 1С бесплатно:

    Напротив строк программного кода система показывает, сколько раз была выполнена эта строчка кода. Правее в процентах указан процент выполнения по времени от общего времени выполнения. В режиме управляемого приложения будет указано, где выполняется программный код — на клиенте или сервере.

    При запуске замера открывается также специальная сводная таблица, где указаны итерации с указанием времени:

    Видео, как запустить замер в отладке 1С:

    Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

    К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

    Проверка выполнения кода в режиме отладки

    Как я могу проверить, что код выполняется в режиме отладки.

    вот что я хотел бы сделать в псевдокоде

    3 ответов

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

    редактировать, если вы всегда хотите пропустить DoSomething код в отладочной сборке, независимо от того, используется ли отладчик, используйте условная компиляция С #If как то так

    что вы имеете в виду в режиме отладки? Если вы ссылаетесь на сборку отладки, вы можете использовать #if DEBUG чтобы проверить, что:

    вы можете использовать функцию IsDebuggerPresent

    Цукерберг рекомендует:  Портфолио с масштабированием миниатюр.
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих
    Разработка программного обеспечения
    Активность ядер
    • Процессы
    • Требования
    • дизайн
    • инженерия
    • строительство
    • тестирование
    • отладка
    • развертывание
    • техническое обслуживание
    Парадигмы и модели
    • проворный
    • Чистая комната
    • дополнительный
    • макетирования
    • спиральный
    • модель V
    • Водопад
    Методологии и рамки
    • ASD
    • DevOps
    • DAD
    • DSDM
    • FDD
    • IID
    • Kanban
    • Lean SD
    • Меньше
    • MDD
    • MSF
    • PSP
    • РАД
    • RUP
    • Безопасный
    • Scrum
    • SEMAT
    • TSP
    • UP
    • XP
    Поддержка дисциплины
    • управление конфигурацией
    • Документация
    • Обеспечение качества программного обеспечения (SQA)
    • Управление проектом
    • Пользовательский опыт
    практика
    • ATDD
    • BDD
    • CCO
    • CI
    • CD
    • DDD
    • PP
    • SBE
    • Вставать
    • TDD
    инструменты
    • составитель
    • дебаггер
    • Profiler
    • GUI дизайнер
    • моделирование
    • IDE
    • Сборка автоматизации
    • автоматизация выпуска
    • Инфраструктура как код
    • тестирование
    Стандарты и органы знаний
    • BABOK
    • CMMI
    • IEEE стандарты
    • ISO 9001
    • Стандарты ISO / IEC
    • PMBOK
    • SWEBOK
    • ITIL
    глоссарии
    • Искусственный интеллект
    • Информатика
    • Электротехника и электроника