Что такое точки прерывания по данным?

Я просто узнал это существуют точки прерывания по данным. Я работал в течение прошлых 5 лет в C++ с помощью Visual Studio, и я никогда не использовал точки прерывания по данным.

Кто-то может пролить некоторый свет на то, каковы точки прерывания по данным, когда использовать их и как использовать их с VS?

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

Какие-либо другие примеры?

26
задан Gary Barrett 6 November 2019 в 19:52
поделиться

3 ответа

Определение:

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

Из MSDN: , Как к: Установите Точку прерывания по данным :

, Как Установить Точку останова

  1. Изменения Памяти Из Меню Отладки, выберите New Breakpoint и нажмите New Data Breakpoint

    — or—

    в меню окна Breakpoints, нажмите выпадающий New и выберите New Data Breakpoint.

    диалоговое окно New Breakpoint появляется.

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

  3. В поле Byte Count, введите номер байтов, которые Вы хотите, чтобы отладчик наблюдал. Например, если Вы войдете 4, то отладчик будет наблюдать четыре байта, запускающиеся в & нечто и повреждение, если какой-либо из тех байтов изменяет значение.

  4. Нажимают "OK".

29
ответ дан stonedauwg 28 November 2019 в 06:10
поделиться

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

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

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

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

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

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

57
ответ дан Community 28 November 2019 в 06:10
поделиться

Я полагаю, что точки прерывания по данным являются точками останова, которые произойдут, когда некоторая память будет установлена на определенное значение. Например, можно установить точку останова, когда я == 10 в типичном, чтобы цикл остановился после 10-го повторения. Можно также наблюдать за изменениями в переменных на "куче", как ожидание члена класса, который будет изменен.

0
ответ дан strager 28 November 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: