Что такое точки останова данных

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

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

Для того чтобы получить возможность пользоваться инструментами отладки , нужно запустить конфигурацию в режиме отладки . Для этого нужно либо нажать на кнопку Начать отладку , либо нажать клавишу F5 на клавиатуре, либо выполнить команду меню Отладка > Начать отладку , рис. 2.9 .


Рис. 2.9.

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

Рассмотрим некоторые методы отладки .

Ошибки в программе

Если в программе происходит ошибка, которая делает дальнейшее исполнение программы невозможным, система выдает сообщение об ошибке. Смоделируем эту ситуацию. Откроем модуль объекта для недавно разработанного документа НачислениеЗарплаты и добавим в его начало такой код, рис. 2.10 :

//Начало ошибочного кода НоваяПеременная=1/0; //Окончание ошибочного кода

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

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


Рис. 2.11.

Нажав на кнопку Подробно в этом окне, мы видим следующее окно, рис. 2.12 .

Нажатие на кнопку Закрыть позволяет проигнорировать ошибку, кнопка Конфигуратор открывает Конфигуратор , а кнопка Завершить работу завершает работу программы.

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

Если ошибочным окажется код, который исполняется в обычном режиме работы 1С:Предприятие, произойдет то же самое.

Удалим "ошибочный" код из текста модуля.

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

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

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

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

На месте щелчка появится большая красная точка - это и есть точка останова . Аналогичного эффекта можно добиться, если установить курсор в нужную строку кода и нажать на клавишу F9 , воспользоваться соответствующей командой контекстного меню строки или командой главного меню Отладка > Точка останова .

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

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


Рис. 2.14.

Точку останова можно временно отключить. Для этого можно воспользоваться командой Отключить точку останова . Такой же командой точку можно включить. На рис. 2.15 вы можете видеть отключенную точку останова .


Рис. 2.15.

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

Удобным средством для управления точками останова является окно Точки останова , рис. 2.16 . Его можно вызвать командой Отладка > Список точек останова .

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

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

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

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

Исполнение программы после остановки

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

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

После того, как программа остановлена, программист может проанализировать ее и продолжить дальнейшее исполнение. А вот здесь существует несколько альтернатив. Они доступны из меню Отладка , рис. 2.18 .


Рис. 2.18.
Продолжить отладку - выбор этой команды (или нажатие на F5 ) позволяет продолжить отладку после остановки либо, если отладка еще не начата (в таком случае команда называется Начать отладку , но для ее запуска можно использовать ту же горячую клавишу - F5 ), запустить ее.
Перезапустить - эта команда нужна для перезапуска отладки . В частности, она полезна в том случае, если в код во время отладки были внесены изменения, и вы хотите продолжать отладку с учетом этих изменений.
Завершить - завершает отладку , закрывает 1С:Предприятие (но не Конфигуратор )
Остановить - "ручной" аналог срабатывания точки останова
Остановка по ошибке - открывает окно, рис. 2.19 , которое позволяет задавать параметры остановки при возникновении ошибок, а так же - указывать тексты отдельных ошибок, при возникновении которых следует остановить отладку . Если в этом окне установлен флаг Останавливаться по ошибке , при возникновении ошибки управление будет передано в отладчик. Этой возможностью полезно пользоваться на начальном этапе отладки решения, когда еще точно неизвестно, где именно могут возникать ошибки.


Рис. 2.19.

4 ответов

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

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

Как установить точку останова памяти

    В меню "Отладка" выберите "Новая точка останова" и нажмите "Новая точка останова данных"

    в окне "Точки останова" выберите "Новое раскрывающееся меню" и выберите "Новая точка останова данных".

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

    В поле "Адрес" введите адрес памяти или выражение, которое оценивает адрес памяти. Например, & foo для разрыва при изменении содержимого переменной foo.

    В поле "Количество байтов" введите количество байтов, которое вы хотите отследить отладчика. Например, если вы введете 4, отладчик будет следить за четырьмя байтами, начинающимися с & foo и break, если какой-либо из этих байтов изменит значение.

    Нажмите "ОК".

    До сих пор мы получили отличное определение и кучу великих теоретических объяснений.

    Приведем конкретный пример!

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

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

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

    Но в этот момент у меня было несколько важных компонентов:

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

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

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

    На практике, точка останова определяется как одно или несколько условий, при которых происходит прерывание программы. Наиболее часто используется условие останова при переходе управления к указанной инструкции программы (instruction breakpoint ). Другое условие останова - операция чтения, записи или изменения указанной ячейки или диапазона ячеек памяти (data breakpoint или watchpoint ).

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


    Wikimedia Foundation . 2010 .

    Смотреть что такое "Точка останова" в других словарях:

      точка останова - stabdos taškas statusas T sritis automatika atitikmenys: angl. break point; breakpoint vok. Anhaltepunkt, m; Fixpunkt, m rus. точка останова, f pranc. point d arrêt, m; point d interruption, m … Automatikos terminų žodynas

      точка останова (программы) - — Тематики нефтегазовая промышленность EN breakpoint …

      точка ломаной линии - останов прерывание точка прерывания точка разрыва точка останова — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы остановпрерываниеточка… … Справочник технического переводчика

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

      - << Intel 80386 >> Центральный процессор Микропроцессор Intel 80386 Производство … Википедия

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

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

      Описание: Отладочная ловушка По умолчанию: завершение процесса коды SA SIGINFO TRAP BRKPT Достигнута точка останова TRAP TRACE Шаг трассировки выполнен В POSIX системах, SIGTRAP сигнал, посылаемый для информирования отладчика о… … Википедия

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

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

    Turbo Pascal предоставляет возможность устанавливать в программе для целей отладки точки останова. Точка останова - это обозначенная в коде программы позиция, в которой необходимо прекратить выполнение программы и вернуть выполнение отладчику. В этом смысле точка останова работает аналогично команде Go to Cursor, при которой программа выполняется обычным путем до достижения определенной точки. Основное различие состоит в том, что можно задать несколько точек останова и точки останова, которые будут срабатывать не при каждом их достижении.

    3.5 Задание точек останова

    Для задания точку останова нужно переместите курсор к той строке, где следует остановиться. Строка должна содержать выполняемый код и не может быть комментарием, описанием или пустой строкой. Выбор команды Toggle Breakpoint в локальном меню окна редактирования или нажатие клавиш Ctrl+F8 устанавливает на строке точку останова, которая обозначается подсветкой всей строки.

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

    3.6 Отмена точки останова

    Для отмены точки останова поместить курсор на содержащую ее строку и выбрать в локальном меню окна редактирования команду Toggle Breakpoint или нажмите клавиши Ctrl+F8.

    3.7 Модификация точек останова

    В процессе сеанса отладки IDE отслеживает все точки останова. Для вывода диалогового окна Breakpoints нужно выбрать команду View|Breakpoints. В этом диалоговом окне можно устанавливать, удалять, редактировать и просматривать свои точки останова.

    Командные кнопки диалогового окна Breakpoints работают следующим образом:

    · Добавление новой: подсветить пустую строку в списке и выбрать

    · кнопку Edit.

    · Отмена точки останова: подсветить ее и выбрать кнопку Clear.

    · Модификациия существующей точки останова: подсветить ее и выбрать Edit.

    · Найти в исходном коде точку останова: подсветить ее и выбрать кнопку View.

    · Удаление всех точек останова: выбрать кнопку Clear All.

    3.8 Создание условной точки останова

    Точки останова, добавленные командой Toggle Breakpoint, являются безусловными, то есть при попадании на эту строку, отладчик в любом случае останавливает программу. При редактировании новой или существующей точки останова есть дополнительная возможность – создать условные точки останова с помощью параметров диалогового окна Debug|Breakpoints…|Edit или Debug|Add Breakpoint. В этих точках останова можно задать два вида условий: счетчик проходов и логические условия.

    3.8.1 Подсчет числа проходов

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

    3.8.2 Проверка условий

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

    3.9 Прерывание программы без точек останова

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