Difference between revisions of "IDE Window: Breakpoints/ru"

From Free Pascal wiki
Jump to navigationJump to search
 
(4 intermediate revisions by 2 users not shown)
Line 17: Line 17:
  
 
;Source Breakpoint: указывается посредством имени модуля и номера строки. Выполнение будет прервано до выполнения оператора pascal в указанной строке. Может быть установлен щелчком по выемке слева в редакторе исходного кода.  
 
;Source Breakpoint: указывается посредством имени модуля и номера строки. Выполнение будет прервано до выполнения оператора pascal в указанной строке. Может быть установлен щелчком по выемке слева в редакторе исходного кода.  
;Address Breakpoint: указывается посредством адресу. Выполнение будет прервано до выполнения оператора <u>ассемблера</u> по адресу. Можно установить, щелкнув по выемке слева в окне дизассемблера.  
+
;Address Breakpoint: указывается посредством адреса. Выполнение будет прервано до выполнения оператора <u>ассемблера</u> по адресу. Можно установить, щелкнув по выемке слева в окне дизассемблера.  
 
;Data/Watch Breakpoint: указывается посредством имени переменной. Выполнение будет прервано при изменении переменной. Он также может обнаружить доступ для чтения. Поддержка этого зависит от используемой платформы.
 
;Data/Watch Breakpoint: указывается посредством имени переменной. Выполнение будет прервано при изменении переменной. Он также может обнаружить доступ для чтения. Поддержка этого зависит от используемой платформы.
  
Line 66: Line 66:
 
[[File:BreakPoint_Properties.png]]
 
[[File:BreakPoint_Properties.png]]
  
;Filename/Line: Расположение точки останова
+
;Filename/Line (Имя файла/Строка): Расположение точки останова
;Condition: The breakpoint will only be triggered and perform the specified actions, if the condition evaluates to true. This can for example be used to test if a variable has reached a critical value.<br> Currently only very basic expressions are allowed. (GDB must be able to understand the expression)<br>
+
;Condition (Условие): Точка останова будет срабатывать и выполнять указанные действия только в том случае, если условие оценивается как истинное. Это может, например, использоваться для проверки, достигла ли переменная критического значения.<br>В настоящее время допускаются только самые базовые выражения. (GDB должен уметь понимать выражение) <br>
:'''NOTE #1:''' The IDE does only apply a very limited pascal syntax fixing to the condition (#48 is escaped as char with ord val 48), so it needs to be C-like, so GDB understands the expression. eg: "i=2" or somechar='a'. Remember that the string (or rather char) value must be wrapper in single quotes, not double quotes. <br>
+
:'''ПРИМЕЧАНИЕ # 1:''' В среде IDE применяется только очень ограниченное исправление синтаксиса Паскаля к условию (#48 экранируется как char с ord значением 48), поэтому он должен быть C-подобным, чтобы GDB понимал выражение, например: "i=2" or somechar='a'. Помните, что строковое (или, вернее, char) значение должно быть обрамлено в одинарные, а не в двойные кавычки. <br>
:'''NOTE #2:''' <s>Strings can not be compared. They are seen as pchar, so they can only be compared to an address: "str=0x5a0b40".</s> Chars in a string can be compared (index is zero based/pchar) "(s[0]='a')and(s[1]='b')". And strings can be compared as PChar (zero terminated): $_streq(^char(MyString), "ValueToCompare") (with double quotes) See: https://sourceware.org/gdb/current/onlinedocs/gdb/Convenience-Funs.html#Convenience-Funs
+
:'''ПРИМЕЧАНИЕ # 2:''' <s>Строки не сравниваются. Они рассматриваются как pchar, поэтому их можно сравнивать только с адресом: "str=0x5a0b40".</s> Можно сравнивать символы в строке (индекс равен нулю/pchar) (s[0]='a')and(s[1]='b')". И строки можно сравнивать как PChar (с нулевым символом в конце):$_streq(^char(MyString), "ValueToCompare") (с двойными кавычками). См .: https://sourceware.org/gdb/current/onlinedocs/gdb/Convenience-Funs.html#Convenience-Funs
;HitCount: The breakpoint will be ignored until it has been hit the specified amount of times. One scenario where this is useful, if an event is triggered by the focus change (between IDE and debugged app) when the app is paused/resumed. The ignored passes of the breakpoint to not alter the focus.<br>
+
;HitCount (Число срабатываний): Точка останова будет игнорироваться до тех пор, пока она не будет пропущена указанное количество раз. Сценарий, где это может оказатсья полезным, это когда событие вызывается изменением фокуса (между IDE и отлаженным приложением) при приостановке/возобновлении приложения. Игнорируются проходы точки останова, чтобы не изменять фокус. <br>
:'''NOTE: #1''' The hitcount starts at 0. So if you want to break on the 10th iteration, set the HitCount to 9.<br>
+
:'''ПРИМЕЧАНИЕ: # 1''' Число срабатываний начинается с 0. Поэтому, если вы хотите разбить на 10-й итерации, установите HitCount в значение 9. <br>
:'''NOTE: #2''' The hit count doesn't reset until you stop/start the debugging or actually delete the breakpoint and set it again (without the need to stop/start the debug session).
+
:'''ПРИМЕЧАНИЕ: # 2''' Счетчик срабатываний не сбросится до тех пор, пока вы не остановите/не начнете отладку или фактически не удалите точку останова и не установите ее заново (без необходимости останавливать/запускать сеанс отладки).
;Auto continue after: This also avoids the focus change between IDE and app. It however indicates the execution line in the source editor, which leads to a visible indication. If the time is long enough watches might be evaluated.
+
;Auto continue after (Продолжить после): Это также позволяет избежать изменения фокуса между IDE и приложением. Однако он указывает на строку выполнения в редакторе исходного кода, что приводит к видимой индикации. Если время достаточно велико, окно отслеживания может быть оценено.
;Group: A breakpoint can be is one group (one only). Groups can be used with the Enable/Disable group feature.  
+
;Group (Группа): Точкой останова может быть одна группа (только одна). Группы могут использоваться с функцией Включения/Отключения группы.
;Actions:  
+
;Actions (Действия):  
:*<u>Break: </u>Pause the application. The application can be continued with the Run command or any of the stepping commands
+
:*<u>Break (Останов):</u> Приостановить приложение. Приложение можно продолжить с помощью команды Run (Выполнить) или любой из пошаговых команд.
:*<u>Enable/Disable Group: </u>Enable or Disable all breakpoints in the given group(s). Usually  2 breakpoints would be set, one to enable, the other to disable. The breakpoints in the specified groups could then be enabled (or disabled) only, if they occur between the 2 points. The breakpoints that are changed could be in subroutines, that are called sometimes between the 2 points, but also from other locations.
+
:*<u>Enable/Disable Group (Включить/Отключить группы):</u> Включить или отключить все точки останова в данной группе (группах). Обычно устанавливаются 2 точки останова, одна для включения, другая для отключения. Точки останова в указанных группах могут быть включены (или отключены) только в том случае, если они находятся между двумя точками. Измененные точки останова могут быть в подпрограммах, которые иногда вызываются между двумя точками, но также и из других мест.
:*<u>Eval Expression: </u>Evaluates the expression and writes the value to the debug event log
+
:*<u>Eval Expression (Вычислить выражение):</u> Оценивает выражение и записывает значение в журнал событий отладки.
:*<u>Log Message: </u> Writes the message to the debug event log
+
:*<u>Log Message (Сообщение в журнал):</u> Записывает сообщение в журнал событий отладки.
:*<u>Log Callstack: </u> Writes the callstack to the debug event log
+
:*<u>Log Callstack (Записать стек вызовов):</u> Записывает стек вызовов в журнал событий отладки.
:*<u>Take a snapshot: </u> Evaluates all Watches, Locals, Callstack, Threads, and adds it to the snapshots in the History dialog.
+
:*<u>Take a snapshot (Сделать снимок):</u> Оценивает все Watches, Locals, Callstack, Threads и добавляет его к снимкам в диалоге Журнала.

Latest revision as of 20:37, 1 January 2023

Deutsch (de) English (en) français (fr) русский (ru)

Важно

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


Light bulb  Примечание: О точках наблюдения:

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

Список точек останова

Breakpoint list.png

Существует 3 вида точек останова:

Source Breakpoint
указывается посредством имени модуля и номера строки. Выполнение будет прервано до выполнения оператора pascal в указанной строке. Может быть установлен щелчком по выемке слева в редакторе исходного кода.
Address Breakpoint
указывается посредством адреса. Выполнение будет прервано до выполнения оператора ассемблера по адресу. Можно установить, щелкнув по выемке слева в окне дизассемблера.
Data/Watch Breakpoint
указывается посредством имени переменной. Выполнение будет прервано при изменении переменной. Он также может обнаружить доступ для чтения. Поддержка этого зависит от используемой платформы.

Отображение данных

State (состояние)
Точка останова может быть включена или отключена. Если она включена, то каждый раз, когда программа достигает точки останова, проверяется условие и, если результаты верны, будут выполняться действия, заданные для точки останова.
Filename/Address (имя файла/адрес)
Line/Length (строка/длина): в зависимости от типа точки останова отображается следующее:
  • Source Breakpoint:
    Filename/Address: имя файла, в котором установлена точка останова.
    Line/Length: Номер строки, в котором задана точка останова.
  • Address Breakpoint:
    Filename/Address: адрес точки останова. Этот тип точки останова полезен, если нет доступного исходника.
    Line/Length: пусто
  • Data Breakpoint:
    Filename/Address: имя переменной
    Line/Length: покажет область ("Global" / "Declaration") и режим ("Read" / "Write" / "Read/Write")
Condition (условие)
обычно достигнутая точка останова выполняет прерывание(я) выполнения кода. Когда условие определено, это условие оценивается. Если это условие оценивается как True (истина), выполняются действие(я) прерывания выполнения кода.
Action (действие)
доступны следующие действия: Break(прерывание выполнения кода), Enable/Disable group(s)(включение/отключение групп(ы)), Log message(журнал сообщений), Evaluate expression(оценка выражения), Ignore/Handle Exceptions(игнорирование/обработка исключений). Полное описание этих действий можно найти в разделе Свойства точки останова этой страницы.
Pass Count (число проходов)
Сколько раз была достигнута включенная точка останова. Если для этой точки останова задано значение «Hitcount» (число срабатываний), отладчик выполнит действие(я) прерывания кода, когда будет достигнуто установленное значение Hitcount.
Group (группа)
группа, к которой принадлежит эта точка останова. Опция позволяет быстро включать/отключать несколько точек останова одновременно

Интерфейс

Панель инструментов

debugger enable.png Enable/debugger disable.png Disable
Включает/отключает отдельные точки останова.
laz delete.png Remove
Удаляет выбранные точки останова.
debugger enable all.png Enable all/debugger disable all.png Disable all
Включает/отключает все точки останова.
menu clean.png Delete all
Удаляет все точки останова.
menu environment options.png Properties
Изменяет свойства текущей/выбранной точки останова.

Контекстное меню

Breakpoint list popmenu.png
View Source
переход к источнику (только для Source-Breakpoints).
Add
открывает диалоговое окно свойств для запрошенного типа точки останова. Расположение/адрес/переменная могут быть заданы в диалоговом окне свойств.
Enabled
устанавливает включенное состояние для отдельных точек останова.
Delete
удаляет выбранные точки останова.
Group
очищает или задает группу для точек останова. Список существующих групп будет отображен в меню. С помощью пункта "Set new group" (задать новую группу) можно создать новую группу.
Enable all/Disable all
включает/отключает все точки останова.
Delete all
удаляет все точки останова.
Disable all in same source/Enable all in same source
включает/отключает все точки останова в том же модуле, что и текущая выбранная точка останова (только для Source-Breakpoints).
Delete all in same source
удаляет все точки останова в том же модуле, что и текущая выбранная точка останова (только для Source-Breakpoints).


Свойства точки останова

BreakPoint Properties.png

Filename/Line (Имя файла/Строка)
Расположение точки останова
Condition (Условие)
Точка останова будет срабатывать и выполнять указанные действия только в том случае, если условие оценивается как истинное. Это может, например, использоваться для проверки, достигла ли переменная критического значения.
В настоящее время допускаются только самые базовые выражения. (GDB должен уметь понимать выражение)
ПРИМЕЧАНИЕ # 1: В среде IDE применяется только очень ограниченное исправление синтаксиса Паскаля к условию (#48 экранируется как char с ord значением 48), поэтому он должен быть C-подобным, чтобы GDB понимал выражение, например: "i=2" or somechar='a'. Помните, что строковое (или, вернее, char) значение должно быть обрамлено в одинарные, а не в двойные кавычки.
ПРИМЕЧАНИЕ # 2: Строки не сравниваются. Они рассматриваются как pchar, поэтому их можно сравнивать только с адресом: "str=0x5a0b40". Можно сравнивать символы в строке (индекс равен нулю/pchar) (s[0]='a')and(s[1]='b')". И строки можно сравнивать как PChar (с нулевым символом в конце):$_streq(^char(MyString), "ValueToCompare") (с двойными кавычками). См .: https://sourceware.org/gdb/current/onlinedocs/gdb/Convenience-Funs.html#Convenience-Funs
HitCount (Число срабатываний)
Точка останова будет игнорироваться до тех пор, пока она не будет пропущена указанное количество раз. Сценарий, где это может оказатсья полезным, это когда событие вызывается изменением фокуса (между IDE и отлаженным приложением) при приостановке/возобновлении приложения. Игнорируются проходы точки останова, чтобы не изменять фокус.
ПРИМЕЧАНИЕ: # 1 Число срабатываний начинается с 0. Поэтому, если вы хотите разбить на 10-й итерации, установите HitCount в значение 9.
ПРИМЕЧАНИЕ: # 2 Счетчик срабатываний не сбросится до тех пор, пока вы не остановите/не начнете отладку или фактически не удалите точку останова и не установите ее заново (без необходимости останавливать/запускать сеанс отладки).
Auto continue after (Продолжить после)
Это также позволяет избежать изменения фокуса между IDE и приложением. Однако он указывает на строку выполнения в редакторе исходного кода, что приводит к видимой индикации. Если время достаточно велико, окно отслеживания может быть оценено.
Group (Группа)
Точкой останова может быть одна группа (только одна). Группы могут использоваться с функцией Включения/Отключения группы.
Actions (Действия)
  • Break (Останов): Приостановить приложение. Приложение можно продолжить с помощью команды Run (Выполнить) или любой из пошаговых команд.
  • Enable/Disable Group (Включить/Отключить группы): Включить или отключить все точки останова в данной группе (группах). Обычно устанавливаются 2 точки останова, одна для включения, другая для отключения. Точки останова в указанных группах могут быть включены (или отключены) только в том случае, если они находятся между двумя точками. Измененные точки останова могут быть в подпрограммах, которые иногда вызываются между двумя точками, но также и из других мест.
  • Eval Expression (Вычислить выражение): Оценивает выражение и записывает значение в журнал событий отладки.
  • Log Message (Сообщение в журнал): Записывает сообщение в журнал событий отладки.
  • Log Callstack (Записать стек вызовов): Записывает стек вызовов в журнал событий отладки.
  • Take a snapshot (Сделать снимок): Оценивает все Watches, Locals, Callstack, Threads и добавляет его к снимкам в диалоге Журнала.