Трассировка программы использование точек останова просмотр и изменение значений элементов данных

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

(1)Точки контрольного останова

Точка контрольного остановаопределяет оператор в программе, перед выполнением которого программа прервет свою работу, и управление будет передано среде Delphi. Точка останова задается с помощью опции View|Debug windows|Breakponts.

Окно точек остановасодержит список всех установленных в проекте точек, перед выполнением которых происходит прекращение работы программы и управление получает среда Delphi.

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

FileName – определяет имя файла;

Line number – номер строки от начала файла (в момент появления окна оно содержит файл и строку с текстовым курсором);

Уроки C++ WinForms / #3 – Добавление функционала к проекту

Condition – можно указать условие останова в виде логического выражения (например, MyValue = Мах-Value-12);

Pass count – количество проходов программы через контрольную точку без прерывания вычислений.

Окно точек останова (слева) и окно добавления новой точки (справа)

(2)Окно наблюдения

Наблюдать за состоянием переменной или выражения можно с помощью специального окна, вызываемого опцией View|Debug windows|Watches.

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

Для добавления нового выражения следует щелкнуть по окну правой кнопкой мыши и выбрать опцию New Watch. В строке Expression ввести выражение. Окно Repeat count определяет количество показываемых элементов массивов данных; окно Digits указывает количество значащих цифр для отображения вещественных данных; переключатель Enabled разрешает или запрещает вычисление выражения. Остальные элементы определяют вид представления значения.

Значения переменных можно также посмотреть во время останова программы, наведя курсор мыши на переменную в тексте кода.

Окно наблюдения и окно добавления в него нового выражения

(3)Принудительное прерывание работы программы

Если программа запущена из среды Delphi, ее работу можно прервать в любой момент с помощью клавиш Ctrl+F2, кнопки ESC, опцией Run|Program Pause или, наконец, установив точку контрольного останова в той части программы, которая выполняется в данный момент или будет выполнена.

(4)Трассировка программы

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

Теперь программист может прослеживать работу программы по шагам с помощью клавиш F7 и F8 или инструментальных кнопок. При нажатии клавиши F8 будут выполнены запрограммированные в текущей строке действия, и работа программы прервется перед выполнением следующей строки текста программы.

Отладка Java кода в IDEA. Основные возможности отладчика.

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

Фрагмент окна редактора в режиме отладки

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

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

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

(5)Действия в точках прерывания

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

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

· Break – останов перед выполнением помеченного оператора;

· Ignore subsequent exceptions – если переключатель установлен, игнорируются все возможные последующие исключения в текущем отладочном сеансе до очередной точки останова, в которой, возможно, это действие будет отменено;

· Handle subsequent exceptions – после установки этого переключателя отменяется действие предыдущего переключателя и возобновляется обработка возможных исключений;

· Log message –можно указать произвольное сообщение, связанное с точкой останова;

· Eval expression – можно вычислить некоторое выражение и поместить его результат в это сообщение.

Окно свойств точек останова

(6)Группировка точек прерывания

В Delphi имеется возможность объединения точек останова в группы. Для этого используется все то же окно (рис. 7.4): в строке Group следует указать имя группы, к которой принадлежит точка, а в строках Enable group и Disable group соответственно разрешить или запретить действие всех точек останова, относящихся к соответствующей группе.

Читайте также:
Индивидуальная программа по постановке звука р

(7)Вычисление выражений и изменение значений

С помощью окна Evaluate/Modify опции Run можно узнать значение любого выражения или установить в переменную другое значение. Это окно вызывается в режиме отладки после нажатия Ctrl+F7.

Окно просмотра изменения значений

В строке Expression можно написать имя переменной или интересующее вас выражение. После щелчка по кнопке Evaluate в поле Result появится текущее значение переменной (выражения). Если в Expression содержится имя переменной, одновременно становится доступной кнопка Modify, а в строке New value повторяется текущее значение переменной. Если изменить эту строку и нажать Modify, в переменную будет помещено новое значение, которое и будет использоваться при дальнейшем прогоне программы (если определяется значение выражения, кнопка Modify и строка New value будут недоступны).

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

(8)Ведение протокола работы программы

В ряде случаев бывает неудобно или невозможно пользоваться пошаговой отладкой программ. В таких ситуациях могут помочь контрольные точки, которые не прерывают работу программы, а лишь помещают некоторую информацию в специальный файл трассировки. Для реализации такой точки следует раскрыть окно Run|Add Breakpoint|Source Breakpoint (рис.

7.1), убрать флажок в переключателе Break и написать сообщение в строке Log message. Можно также в строке Eval expression указать выражение, которое будет вычислено и вместе с сообщением помещено в протокол работы программы. Этот протокол можно просмотреть в любой момент (в том числе и после завершения прогона программы) с помощью опции View|Debug Windows|Event Log.

Глава 5. Лекция 5

Дата добавления: 2016-05-31 ; просмотров: 1879 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Источник: poznayka.org

Окно просмотра значений

Когда приходится постоянно контролировать значения группы из несколько переменных, использование всплывающих подсказок становится довольно утомительным. Вместо этого можно добавить несколько переменных, свойств или компонент, мониторинг которых вы хотите осуществлять, в окно Список наблюдений(Watch List). Это окно можно использовать как отправную точку для установки точек останова по изменению данных. Добавить элемент просмотра в это окно можно:

    • нажатием комбинации клавиш Ctrl+F5;
    • выполнив команду Выполнить/Добавить наблюдение;
    • с помощью команды Добавить контекстного меню окна;
    • перетащить переменную или выражение из окна редактора кода в окно Список наблюдений.

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

          Окно Локальных переменных

          Еще одна полезная возможность в Delphi — окно Локальные переменные (LocalVariables). Это окно автоматически отображает имена и значения всех локальных переменных в текущей процедуре или функции, когда выполнение программы остановлено в точке останова. Для методов будут также отображены private- данныенеявной переменной Self. Рис. 2.10. Окно Локальные переменные Окно Локальные переменные очень похоже на окно Просмотр значений, но вам не нужно задавать его содержимое, поскольку оно автоматически обновляется при входе в новую функцию или метод или при остановке (по точке останова) в новой функции. Для всех ссылок на объекты, появляющиеся в окне Локальные переменные (или в окнеПросмотр значений), помимо просмотра значений в одной строке, имеется возможность открывать окна Инспектор отладки (Debug Inspector). Это можно сделать следующими способами:

            • дважды щелкнуть на переменной в окне Локальных переменных;
            • вызвать щелчком правой кнопки контекстное меню и выбрать в нем команду Инспекция (Inspect).

                  Стек вызовов

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

                  Окно Стека вызовов (рис. 2.12) показывает имена подпрограмм в стеке и параметры, переданные при каждом вызове. Наверху окна показана последняя функция, вызванная программой, после чего идет функция, вызвавшая ее, и т. д. Рис. 2.12. Окно Стек вызововс информацией о порядке вызова подпрограмм и переданных им фактических параметрах.

                          Инспектор отладки

                          Инспектор отладки (Debug Inspector) дает возможность просмотра данных, методов и свойств объекта или компонента на этапе выполнения. Его интерфейс весьма похож на интерфейс окна Инспектор объектов(Object Inspector) на этапе разработки. Рис. 2.13. Окно Инспектор отладки, вызванное из окна Список наблюдений. Основное отличие состоит в том, что Инспектор отладки показывает не только published — свойства, а весь список свойств, методов и локальных полей данных объекта, в том числе и private-поля. Вызвать Инспектор отладки во время отладки можно:

                            • поместив текстовый курсор перед именем переменной (или выделив переменную/выражение) в редакторе кода, а затем выполнить команду Выполнить/Инспектор;
                            • находясь к окне Список наблюдений вызвать щелчком правой кнопки контекстное меню и выбрать в нем команду Инспектор( рис.2.13).
                            • находясь к окне Локальные переменные вызвать щелчком правой кнопки контекстное меню и выбрать в нем команду Инспектор (рис. 2.14).
                            Читайте также:
                            Программа как загрузить контейнер

                            Инспектор отладки показывает определения свойств, а не их значения. Для просмотра значения необходимо выбрать свойство и щелкнуть на маленькой кнопке справа с вопросительным знаком, при этом значение будет вычислено (если. возможно). Можно также изменять данные объекта или значения его свойств щелкнув кнопку с тремя точками (вызвав редактор). Рис. 2.14. Окно Инспектор отладки, вызванное из окна Локальные переменные.

                            Источник: studfile.net

                            Советы по отладке в Visual Studio 2010

                            Это двадцать шестая публикация в серии публикаций о VS 2010 и .NET 4.

                            Сегодняшняя публикация рассматривает некоторые полезные советы по отладке которые вы можете применять в Visual Studio. Мой друг Скот Кэйт (Scott Cate) (который опубликовал в блоге дюжину великолепных советов и трюков по VS) недавно обратил мое внимание на несколько хороших советов о которых не знает много разработчиков использующих Visual Studio (даже при том, что многие из них работают с ней уже давно с более ранних версий).

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

                            Run to Cursor (Ctrl + F10) (Выполнить до курсора)

                            Часто я наблюдаю людей отлаживающих приложения следующим образом: они устанавливают точку останова на много раньше того места которое их интересует, а затем постоянно пользуются F10/F11 чтобы пройти по коду пока не будет достигнуто то место, которое на самом деле они хотят исследовать. В некоторых случаях они внимательно осматривают каждое выражение, через которое они проходят (в таких случаях использование F10/F11 имеет смысл). Однако, чаще, люди просто пытаются быстро перейти к строке кода которая на самом деле их интересует — в таких случаях использование F10/F11 это не лучший способ для достижения такой цели.
                            Вместо этого, вы можете воспользоватся функцией “run to cursor” («выполнить до курсора») которая поддерживается отладчиком. Просто установите курсор на строке кода до которой вы хотите выполнить приложение, а затем нажмите вместе Ctrl + F10. Это приведет к выполнению приложения до этой строки и переходу в режим отладки сохраняя время которое могло быть потрачено на множественные нажатия F10/F11 для того, чтобы попасть сюда. Это работает даже в тех случаях, когда код в который вы хотите попасть находится в отдельном методе или класс по отношению к тому месту которое вы в данный момент отлаживаете.

                            Conditional Breakpoints (Условные точки останова)

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

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

                            Как включить Conditional Breakpoint (Условную точку останова)

                            Настройка условных точек останова в реальности проста. Нажмите в коде F9, чтобы установить точку на определенной строке (прим. пер. вы также можете установить точку останова кликнув мышью на левой границе окна редактора ровно на уровне строки, где нужно поставить точку останова):

                            image

                            Затем щелкните правой кнопкой мыши на красном кружке точки останова слева от окна редактора и выберите контекстное меню «Condition. » («Условие. »):

                            image

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

                            image

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

                            Читайте также:
                            Как подать заявку на благоустройство двора по программе городская среда

                            Функция Hit Count (Число попаданий)

                            Иногда вам нужно, чтобы происходила остановка отладчика только при условии, что условие истинно N-раз.
                            Например, останавливаться только, если уже 5 раз поиск возвратил меньше чем 10 обедов.

                            Вы можете включить такое поведение правым щелчком на точке останова и выбором пункта меню «Hit count. » («Количество попаданий. »).

                            image

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

                            image

                            Фильтрация по Machine/Thread/Process (Имя машины/Поток/Процесс)
                            Вы можете также щелкнуть правой кнопкой на точке останова и выбрать пункт «Filter. » («Фильтр. ») из контекстного меню, чтобы указать, что точка останова должна быть достигнута, если процесс отладки происходит на определенной машине или в определенном процессе или в определенной потоке.

                            Точки трассировки (TracePoints) – пользовательские события при попадании в точку останова

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

                            Я использую простое консольное приложение (Console application), чтобы продемонстрировать как мы могли бы воспользоваться Точками трассировки. Ниже приведена рекурсивная реализация ряда Фибоначчи:

                            image

                            В приложении приведенном выше мы используем Console.WriteLine() чтобы выводить окончательные значение ряда для конкретного значения диапазона. Что если мы захотели отследить рекурсивную последовательность ряда Фибоначчи в действии одновременно с отладкой – без фактической его остановки или приостановки? Точки трассировки могут помочь нам легко это сделать.

                            Установка точки трассировки (TracePoint)

                            Вы можете включить точки трассировки воспользовавшись клавишей F9 для установки точки останова в строке кода и затем щелкнув правой кнопкой на точке останова и выбрав пункт «When Hit. » («Когда Попадает. ») из контекстного меню:

                            image

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

                            image

                            Выше мы указали, что хотим выводить трассировочное сообщение каждый раз, когда условие точки останова достигнуто. Заметьте, что мы указали, что мы хотим выводить значение локальной переменной «x» как части сообщения. На локальные переменные можно ссылаться используя синтаксис . Также есть встроенные команды (такие как $CALLER, $CALLSTACK, $FUNCTION и т. д.) которые могу использоваться для вывода общих значений в ваши трассировочные сообщения.

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

                            А теперь, когда мы выполняем приложение, мы увидим, что наше пользовательское сообщение трассировки автоматически отображается в окне Visual Studio «output» («вывод») позволяя нам следить за рекурсивным поведением приложения:

                            image

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

                            Точки трассировки (TracePoints) – выполнение пользовательского макроса

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

                            Эта возможность не встроена в Visual Studio, но может быть включена при помощи пользовательского макроса и последующей настройки Точки трассировки для вызова макроса, когда эта точка достигнута. Чтобы это выполнить откройте интегрированную среду для макросов внутри Visual Studio (Tools->Macros->Macros IDE menu command). Далее под узлом MyMacros в обозревателе проекта выберите модуль или создайте новый (например: с именем “UsefulThings”). После этого вставьте следующий код макроса на VB в модуль и сохраните его:

                            Dim outputWindow As EnvDTE.OutputWindow

                            outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput). Object

                            Dim currentStackFrame As EnvDTE.StackFrame

                            outputWindow.ActivePane.OutputString( «*Dumping Local Variables*» + vbCrLf)

                            For Each exp As EnvDTE.Expression In currentStackFrame.Locals

                            * This source code was highlighted with Source Code Highlighter .

                            void DumpLocals() EnvDTE.OutputWindow outputWindow;
                            outputWindow = DTE.Windows.Item[EnvDTE.Constants.vsWindowKindOutput].Object;
                            EnvDTE.StackFrame currentStackFrame;
                            currentStackFrame = DTE.Debugger.CurrentStackFrame;
                            outputWindow.ActivePane.OutputString(( «*Dumping Local Variables*» + «rn» ));
                            foreach (EnvDTE.Expression exp in currentStackFrame.Locals) outputWindow.ActivePane.OutputString((exp.Name + ( » #A31515″>»rn» ))));
                            >
                            >

                            * This source code was highlighted with Source Code Highlighter .

                            Код макроса приведенный выше циклически проходит по текущему стеку и выводит все переменные в окно вывода.

                            Использование нашего пользовательского макроса DumpLocals

                            Затем мы можем использовать наш пользовательский макрос «DumpLocals» простое дополнительное приложение, которое приведено ниже:

                            image

                            Рейтинг
                            ( Пока оценок нет )
                            Загрузка ...
                            EFT-Soft.ru