Точка останова обнаружена точка останова что это такое
Перейти к содержимому

Точка останова обнаружена точка останова что это такое

  • автор:

Устранение неполадок с точками останова в отладчике Visual Studio

При отладке точка останова имеет два возможных визуальных состояния:

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

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

«Для этого документа не загружены символы»

Перейдите в окно Модули (Отладка>модулейWindows>) при отладке и проверка, загружен ли модуль.

  • Если модуль загружен, проверка столбец Состояние символа, чтобы узнать, загружены ли символы.
    • Если символы не загружены, проверка состояние символа для диагностики проблемы. В контекстном меню модуля в окне Модули выберите Сведения о загрузке символов. , чтобы узнать, куда посмотрел отладчик, чтобы попытаться загрузить символы. Дополнительные сведения о загрузке символов см. в разделах Указание символа (PDB) и Исходные файлы.
    • Если символы загружены, PDB не содержит сведения об исходных файлах. Ниже приведены некоторые возможные причины.
      • Если исходные файлы были недавно добавлены, убедитесь, что загружается последняя версия модуля.
      • Можно создать урезанные PDB-файлы с помощью параметра компоновщика /PDBSTRIPPED . Урезаемые PDB-файлы не содержат сведения об исходном файле. Убедитесь, что вы работаете с полной PDB, а не срезаемой PDB.
      • PDB-файл частично поврежден. Удалите файл и запустите чистую сборку модуля, чтобы попытаться устранить проблему.
      • Убедитесь, что выполняется отладка правильного процесса.
      • Убедитесь, что выполняется отладка правильного кода. Вы можете узнать, какой тип кода настроен отладчик для отладки, в окне Процессы (Отладка>процессовWindows>). Например, если вы пытаетесь отладить код C#, убедитесь, что отладчик настроен для соответствующего типа и версии .NET (например, Управляемое (версии 4*) и Управляемое (версии 2*/v3*) и Управляемое (CoreCLR)).

      «… текущий исходный код отличается от версии, встроенной в . «

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

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

      Следуйте одному из вариантов, чтобы отключить эти проверки безопасности:

      • Чтобы изменить одну точку останова, наведите указатель мыши на значок точки останова в редакторе и выберите значок параметров (шестеренка). Окно просмотра добавляется в редактор. В верхней части окна просмотра есть гиперссылка, указывающая расположение точки останова. Выберите гиперссылку, чтобы разрешить изменение расположения точки останова и проверка Разрешить исходный код отличаться от исходного.
      • Чтобы изменить этот параметр для всех точек останова, перейдите в раздел Параметры отладки>и Параметры. На странице Отладка/Общие снимите флажок Требовать исходные файлы, которые точно соответствуют исходной версии . После завершения отладки обязательно повторно включите этот параметр.

      Точка останова была успешно задана (без предупреждения), но не достигла

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

      Вот несколько вещей, которые следует проверка:

      1. Если код выполняется в нескольких процессах или нескольких компьютерах, убедитесь, что выполняется отладка правильного процесса или компьютера.
      2. Убедитесь, что код выполняется. Чтобы проверить выполнение кода, добавьте вызов System.Diagnostics.Debugger.Break (C#/VB) или __debugbreak (C++) в строку кода, в которой вы пытаетесь задать точку останова, а затем перестроить проект.
      3. При отладке оптимизированного кода убедитесь, что функция, для которой задана точка останова, не встраивается в другую функцию. Тест Debugger.Break , описанный в предыдущем проверка, также может работать для проверки этой проблемы.
      4. Для присоединения к сценариям процесса убедитесь, что выполняется отладка правильного типа кода (например, код скрипта и платформа .NET Framework и .NET 5+). Для изучения проверка параметр Присоединить к в диалоговом окне Присоединение к процессу и при необходимости нажмите кнопку Выбрать, чтобы изменить тип кода.

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

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

      Точка останова обнаружена точка останова что это такое

      © 2010-2020 Visualmicro.com
      All Rights Reserved.

      Registered in England No. 8093282

      attribution of 3rd party trademarks : Arduino and Arduino logo, Arduino Srl | ARM mbed, ARM Ltd. | Atmel, Atmel Corporation | Freescale, Feescale Semiconductor Inc. | Intel, Intel Corporation. | Microchip, Microchip Technology Inc. | Silicon Labs, Silicon Laboratories Inc. | Texas Instruments, Texas Instruments Inc.

      Как использовать точки останова в своем коде на JavaScript

      Как использовать точки останова в своем коде на JavaScript главное изображение

      Когда использовать брейкпоинты и какие точки останова бывают

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

      Какие еще есть виды брейкпоинтов:

      • Условная строка кода. Находится в определенном месте, как и специальная инструкция, но выполняется только в случае, если верно какое-то из условий.
      • DOM. Используется в коде, который изменяет или удаляет определенный узел DOM, либо его дочерние элементы.
      • XHR. Используется, когда URL-адрес в XHR содержит шаблон строки.
      • Подписчик на события. Используется в коде, который автоматически запускается после запуска определенного события. Например, после выполнения действия клика.
      • Исключение. Работает в строке кода, которая вызывает пойманное или перехваченное исключение.
      • Функции. Используется, когда вызывается определенная функция.

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

      Точки останова в коде через DevTools

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

      Открыть DevTools из браузера Google Chrome можно двумя способами:

      1. Сочетанием горячих клавиш: для Windows и Linux — Ctrl + Shift + I, а для macOS cmd + Shift + I.
      2. Через интерфейс: для этого на странице нужно кликнуть правой кнопкой мыши в любом месте и выбрать «Просмотреть код». Более подробно про работу с DevTools читайте в нашей большой статье.

      Вот что нужно сделать для того, чтобы установить точку останова строки кода в DevTools.

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

      Точки останова в коде, который специально поставил разработчик

      Для создания такого брейкпоинта нужно просто вызвать debugger в коде. Этот подход эквивалентен предыдущему способу, через DevTools, только без использования визуального интерфейса.

      console.log('a'); console.log('b'); debugger; console.log('c'); 

      Точки останова для условий

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

      Как установить условный брейкпоинт:

      • Перейдите во вкладку Sources
      • Выберите файл, который содержит строку кода, где нужно поставить брейкпоинт
      • Найдите нужную строчку
      • Слева от строки кода находится столбец с ее номером (да, пока все как при установке обычной точки останова). Щелкните на него правой кнопкой мыши
      • Выберите Add conditional breakpoint. Под строчкой кода появится диалоговое окно
      • Добавьте условие, при котором должен срабатывать брейкпоинт
      • Нажмите Enter, чтобы активировать точку останова. После этого около строчки появится оранжевый значок.

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

      Управлять брейкпоинтами можно с помощью плашки breakpoints во вкладке Sources через Devtools.

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

      Точки останова в DOM

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

      Как это сделать:

      • Перейдите во вкладку Elements
      • Найдите элемент, на который нужно установить брейкпоинт
      • Нажмите на элемент правой кнопкой мыши
      • Наведите мышь на Break on, а затем выберите Subtree modifications, Attribute modifications или Node removal в зависимости от того, что вы хотите сделать. Ниже расскажем, что это такое и как работает.

      Типы точек останова для изменения DOM

      Subtree modifications — запускается, когда дочерний элемент выбранного узла удаляется или добавляется. Либо изменяется содержимое дочернего элемента. Subtree modifications не надо запускать при изменении атрибутов дочернего узла или при любых изменениях выбранного в данный момент узла.

      Attribute modifications — запускается, когда пользователь добавляет или удаляет атрибут у выбранного в данный момент узла. Также Attribute modifications запускается при изменении значения атрибута.

      Node removal — срабатывает, когда текущий выбранный узел удаляется.

      Использование точек останова с XHR/Fetch

      Используйте брейкпоинты с XHR, если выполнение кода нужно прервать, когда URL-адрес запроса XHR содержит заранее указанную строку. DevTools остановится на той строке кода, где XHR вызывает функцию send(). Эта же функция также работает с Fetch API.

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

      Как установить брейкпоинт для XHR:

      • Перейдите во вкладку Sources
      • Откройте панель XHR Breakpoints
      • Нажмите Add breakpoint
      • Введите строку, во время появления которой должен срабатывать брейкпоинт. То есть DevTools будет приостанавливать выполнение кода, если эта строка будет присутствовать в URL-адресе запроса XHR.
      • Нажмите Enter для подтверждения.

      Точки останова для обработчика событий

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

      Как установить брейкпоинт для обработчика событий:

      • Перейдите во вкладку Sources
      • Откройте вкладку Event Listener Breakpoints. DevTools покажет список различных категорий событий, таких как Animation.
      • Отметьте одну из категорий, чтобы брейкпоинт срабатывал при запуске любого события из этой категории.

      Точки останова для исключений

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

      Как запустить брейкпоинты для исключений:

      • Перейдите во вкладку Sources
      • Нажмите Pause on exceptions. При включении кнопка становится синей.

      • Установите флажок Pause On Caught Exceptions, если вы хотите приостанавливать все перехваченные исключения в дополнение к необработанным. Это необязательный пункт.

      Точки останова для функций

      Можно вызывать debug(functionName) , где functionName — это имя функции, которую вы собираетесь отладить. Она будет вызывать брейкпоинты каждый раз перед выполнением, чтобы ее можно было спокойно отдебажить.

      Для приостановки выполнения кода можно как вставить debug() в код, так и вызвать его в DevTools. При этом debug() будет эквивалентна установке брейкпоинта в первой строчке кода функции:

      const sum = (a, b) =>  const result = a + b; // В DevTools будет пауза на этой строке return result; > debug(sum); // Передаем объект функции sum(); 

      Убедитесь, что ваша функция находится в области видимости.

      DevTools выдает ReferenceError , если функция, которую вы хотите отлаживать, не входит в область действия.

      const func = () =>  const hey = () =>  console.log('hey'); >; const yo = () =>  console.log('yo'); >; debug(yo); // Работает yo(); >; func(); debug(hey); // Не работает. Функция hey() не входит в область действия 

      При этом убедиться, что функция находится в нужной области видимости, может быть достаточно сложно, особенно если вы используете debug() внутри консоли в DevTools. Как это можно исправить:

      • Установите брейкпоинт там, где ваша функция находится в области видимости
      • Запустите точку останова
      • Вызовите debug() в консоли DevTools в то время, пока действие кода все еще приостановлено через брейкпоинт.

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

      Точки останова: что это такое и почему они такие мощные

      Точки останова: что это такое и почему они такие мощные

      Это была трудная неделя. В настоящее время я просматриваю окончательный вариант моей будущей книги по отладке. Это всегда отрезвляющий и волнующий момент. Момент, когда все месяцы работы вдруг становятся «настоящими».

      Я также записал 9 видеороликов для YouTube, в результате чего общее количество видеороликов в курсе достигло 29 (еще больше на подходе). Я запускаю два дополнительных бесплатных курса, один предназначен для начинающих.

      Еще одна посвящена современному программированию на Java, которую я выпущу очень скоро. Оба варианта будут бесплатными на моем канале YouTube (обязательно «Нравится, подпишитесь и поделитесь»).

      В статье этой недели мы поговорим о точках останова. Это длинно, поскольку то, что мы имеем в виду, когда говорим о точке останова, на самом деле просто «точка останова строки». Как вы можете видеть ниже, их гораздо больше.

      Расшифровка

      Добро пожаловать в четвертую часть отладки в Scale, где мы надираем задницы и присваиваем имена. Имена переменных!

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

      Мы говорили о самых основных точках останова в нашей первой части. На этот раз мы углубимся в некоторые менее известные нюансы.

      Условные точки останова

      Начнем с условных точек останова. Условные точки останова позволяют нам определить условие для попадания в точку останова. Это предотвращает постоянную остановку потока в точке останова. Я обсуждал это ранее с объектом маркера myThread, который мы создали в предыдущем видео.

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

      Точки останова метода

      Точки останова метода довольно проблематичны.

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

      Мы можем переключить стандартную точку останова строки с помощью Control-F8 или, альтернативно, на Mac с помощью Command-F8 .

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

      Вы будете правы. Точки останова метода намного медленнее, и вам не следует их использовать: для этого. Однако есть вариант использования точек останова метода.

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

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

      Чтобы увидеть пример использования точек останова метода, давайте перейдем в окно управления точками останова. Допустим, мы хотим разбить все методы, начинающиеся с букв I и S в классах, имя которых начинается с Prime.

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

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

      Полевые точки наблюдения

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

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

      Это называется точкой наблюдения, а не точкой останова, потому что это не та точка, где код останавливается. Он останавливается в точке доступа, а не на самом поле.

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

      IDE предоставляют пользовательский интерфейс для управления всеми контрольными точками. Мы можем управлять уже имеющимися точками останова и создавать новые точки останова в меню просмотра точек останова. Я могу открыть его с помощью параметра меню просмотра точек останова или использовать комбинацию клавиш Shift-Control-F8 .

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

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

      Точки останова исключений — это отстой (или нет?)

      Мы можем установить точку останова для остановки при возникновении исключения. Но это небольшая проблема. У меня есть два варианта. Во-первых, я могу поймать конкретное исключение по имени. Это полезно, если вы заранее знаете, какое исключение будет сгенерировано.

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

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

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

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

      После включения улова я пытаюсь продолжить, но он снова и снова снова и снова попадает в точку останова. Код опрашивает WebService в фоновом режиме. В этой веб-службе отсутствует заголовок HTTP, поэтому код, анализирующий этот заголовок, завершается с ошибкой NumberFormatException.

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

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

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

      Теперь мы можем определить фильтр класса. Обратите внимание, что я добавляю к обоим фильтрам префикс минус, чтобы превратить это в фильтр исключения. Здесь я определяю фильтр для всех пакетов Java и всех пакетов Sun. Это означает, что каждое исключение, которое обрабатывается в этих пакетах, не будет нарушено.

      Как только я нажимаю «ОК», я могу нажать «Продолжить», и приложение запускается без прерывания проблемных исключений. Другие исключения будут работать как обычно и дадут нам знать, когда что-то сломается в нашем коде!

      Удивительно, что это не стандартная среда IDE. Без него функция практически бесполезна.

      Точки трассировки (точки журнала)

      Точки трассировки или LogPoints — одни из самых важных типов точек останова, которые у нас есть. Мы можем добавить точку трассировки, щелкнув желоб с нажатой клавишей Shift. Это открывает знакомый диалог точки останова, но выглядит немного по-другому. Во-первых, обратите внимание на это:

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

      Точка трассировки не приостанавливает текущий поток. Приложение достигает точки останова и продолжает работать без остановки. Это довольно новаторски, как вы переступите?

      Ну, вы не знаете. Вместо этого мы можем сделать несколько других вещей…

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

      Трудно читать много следов в списке и следовать им. Я хочу сосредоточиться на другом.

      Обратите внимание, что в оценке и журнале уже было значение cnt , потому что я выбрал значение cnt в среде IDE перед нажатием клавиши Shift в поле.

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

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

      А затем запустите эту программу; мы можем видеть, что журнал, который мы добавили в точку трассировки, выводится на консоль, как если бы мы написали его в коде!

      Группировка и наименование

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

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

      Но здорово то, что мы можем создавать собственные группы для точек останова и отключать точки останова в группе одним переключателем. Это очень удобно!’

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

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

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

      Отключить точку останова

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

      Мы можем отключить точку останова до тех пор, пока не сработает другая точка останова или исключение, после чего точка останова автоматически включится. Это избавляет нас от необходимости постоянно нажимать «Продолжить», если мы хотим протестировать только определенный путь.

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

      Это очень полезно в случае сбоя, который происходит только по определенному пути. Я могу добавить точку трассировки к первому методу. Затем отключите фактическую точку останова, которую я хочу в этой точке трассировки.

      Фильтры экземпляров

      Фильтры экземпляров позволяют принимать точку останова только от определенного экземпляра объекта.

      Обратите внимание на экземпляр текущего объекта, отмеченный как «этот» в часах. Обратите внимание, что за символом at следует число 656.

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

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

      Мне нужно проверить параметр фильтра экземпляра, а затем ввести идентификатор объекта экземпляра, который я хочу отфильтровать. Это будет означать, что точка останова не остановится для других типов экземпляров. Чтобы применить это изменение, я нажимаю «Готово».

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

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

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

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

      Фильтры классов

      Фильтры классов не имеют смысла для типичной точки останова строки. Фильтры классов имеют смысл при использовании точки наблюдения поля или точки останова исключения.

      В этом случае у меня есть публичное поле. Я фильтрую доступ к полю, чтобы игнорировать любой доступ из основного основного класса. Если к полю обращается другой класс, сработает точка останова.

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

      Фильтры вызывающих абонентов

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

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

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

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

      Заключительное слово

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

      Если у вас есть какие-либо вопросы, пожалуйста, используйте раздел комментариев. Спасибо!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *