Sign in Join
Wiki copytemporary

GDB Debugger Tips/ru: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11# Вступление
22
33Lazarus поставляется с [[GDB]] в качестве отладчика по умолчанию. Начиная с Lazarus 2.0, это значение по умолчанию изменилось на LLDB на MacO.
44
55- Эта страница для Lazarus 1.0 и новее. Для более старых версий см. \[ предыдущая версия этой страницы\]
66- Примечание по GDB 7.5: GDB 7.5 не поддерживается выпущенной версией 1.0. Исправления для поддержки были сделаны в 1.1.
77
88# См.также
99
1010## Установка (GDB и LLDB)
1111
1212Чтобы получить наилучшие результаты, вы должны убедиться, что ваша IDE и Project правильно настроены.
1313
1414См. раздел [[Debugger Setup/ru|установка отладчика]], чтобы настроить IDE и ваш проект для использования отладчика.
1515
1616[Setup Video Tutorial](http://www.youtube.com/watch?v=cf4G06k2YL8)
1717
1818## Другое
1919
2020[[Debugger Console App|Debugging console applications]]
2121
2222# Основное
2323
2424## Тип отладочной информации (GDB и LLDB)
2525
2626> **Note:** Эти настройки применяются только к проекту или пакету, для которого они установлены. Если вы изменяете настройки в любом из параметров проекта или пакета, следует убедиться, что это сделано для **всех** пакетов и проекта.\
2727> В противном случае ваш проект будет иметь смешанную информацию отладки, что может привести к ухудшению процесса отладки.\
2828> Настройки могут быть применены к проекту или пакетам с использованием [[IDE Window: Compiler Options|Additions and Overrides]]
2929
3030> **Note:** При компиляции 32-битных приложений (нативных или кросс) FPC по умолчанию имеет значение "Stabs" (по крайней мере, в некоторых ОС). Рекомендуется изменить вашу конфигурацию на "Dwarf".
3131
3232Для 64-битных приложений FPC поддерживает только "Dwarf". (Старые FPC также поддерживают "Stabs", но это не рекомендуется)
3333
3434### Stabs (только GDB)
3535
3636-g или -gs
3737
3838Вы должны использовать только если ваша версия GDB не поддерживает \[режим\] dwarf. Есть очень мало других случаев, когда вам это нужно.
3939
4040Вам может понадобиться это \[в случае использования\] «var param» (param by ref): `procedure foo(var a: integer);` Однако IDE имеет дело с этим в 99% всех случаев.
4141
4242Отладчик на основе LLDB не поддерживает \[режим\] Stabs
4343
4444### Dwarf (GDB и LLDB)
4545
4646#### Dwarf 2 (-gw)
4747
4848Это устанавливает формат в Dwarf2. Это самая основная настройка dwarf.
4949
5050#### Dwarf 2 с наборами (-gw -godwarfsets)
5151
5252Этот параметр добавляет возможность проверки наборов: "type TFoo=set of (a,b,c);". Это заимствовано из спецификаций Dwarf 3, но поддерживается большинством версий GDB (любой GDB начиная с версии 7 и выше должен это делать).  **Это рекомендуемая настройка.**
5353
5454#### Dwarf 3 (-gw3)
5555
5656Dwarf 3 может кодировать дополнительную информацию для некоторых типов (таких как строки и массивы). Это также сохраняет регистр идентификаторов в отладочной информации.
5757
5858Однако все еще есть проблемы с произведенной отладочной информацией. Некоторая информация может быть неправильно закодирована, а другая не понята GDB. В некоторых случаях это может привести к падению gdb. Этот параметр можно использовать при использовании отладчика на основе FpDebug (добавить пакет для IDE)
5959
6060### Различия
6161
6262Этот список никоим образом не полон:
6363
6464- dwarf допускает некоторые свойства (те, которые непосредственно сопоставлены с полем)
6565- stabs (и современный gdb) может делать -gp (сохранить регистр символов вместо того, чтобы получать все заглавные буквы).
6666- stabs имеет проблемы с некоторыми типами классов. IDE исправляет это в некоторых случаях. (Влияет только на GDB 7.0 и выше) [1](http://bugs.freepascal.org/view.php?id=19920)
6767
6868## Проверка типов данных (Watch/Hint)
6969
7070### Строки
7171
7272GDB не знает тип данных строк Паскаля. Информация о типе, которую возвращает GDB, в настоящее время не позволяет IDE различать PChar (индекс равен 0) и строку (индекс равен 1).
7373
7474В результате "mystring\[10\]" может быть 10-ым символом в строке или 11-м в PChar
7575
7676Поскольку среда IDE не может быть уверена, какая из них применима, она покажет оба варианта. 2 результата будут иметь префикс String/PChar.
7777
7878### Свойства
7979
8080В настоящее время отладчик не поддерживает выполнение каких-либо методов. Поэтому могут быть проверены только те свойства, которые относятся непосредственно к переменной. (Это работает только при использовании dwarf).
8181
8282``` pascal
8383TFoo = Class
8484private
8585 FBar: Integer;
8686 function GetValue: Integer;
8787public
8888 property Bar: Integer read FBar; // Может быть проверено (если используется Dwarf)
8989 property Value: Integer read GetValue; // *Не* может быть проверен
9090end;
9191```
9292
9393### Вложенные процедуры / функции
9494
9595``` pascal
9696procedure SomeObject.Outer(NumText: string);
9797var
9898 OuterVarInScope: Integer;
9999
100100procedure Nested;
101101var
102102 I: Integer;
103103begin
104104 WriteLn(OuterVarInScope);
105105end;
106106
107107var
108108 OuterVarOutsideScope: Integer;
109109
110110begin
111111 Nested;
112112end;
113113```
114114
115115Если вы входите в «Nested», то IDE позволяет вам проверять переменные из обоих стековых фреймов.
116116
117117Это вы можете проверить: I, OuterVarInScope, NumText (без необходимости изменять текущий фрейм стека, в окне стека)
118118
119119Однако есть несколько оговорок:
120120
121121Вы также можете проверить: OuterVarOutsideScope. Это против правил определения границ Паскаля. Это имеет значение, только если у вас есть несколько вложенных уровней, и все они содержат переменную с тем же именем, но область видимости Паскаля скрыла бы переменную из среднего фрейма. Тогда вы увидите неправильное значение.
122122
123123Вы не можете оценить операторы по 2 фреймам: «OuterVarnScope-I» не работает.
124124
125125> **Warning:** Вы можете увидеть неправильное значение. Если в любом другом модуле есть глобальная (или иным образом видимая для правил области действия GDB) переменная с тем же именем, что и локальная переменная из внешнего фрейма, будет показана эта глобальная переменная. Там нет никакого предупреждения для этого. Безопасным способом является явный выбор внешнего стекового фрейма, в котором определен локальный var, и проверка значения.
126126
127127### Массивы
128128
129129``` pascal
130130array [x..y] of Integer;
131131```
132132
133133показывает как символы, а не int. Только GDB 7.2 или выше, кажется, справиться с этим правильно.
134134
135135Кроме того, могут возникнуть проблемы при использовании массивов (неназванных) записей.
136136
137137Динамические массивы будут показывать только ограниченный объем своих данных. Начиная с Lazarus 1.1, предел может быть указан.
138138
139139Если значения Watches/Hint отображаются некорректно, отключите REGVARS. Установите -OoNOREGVAR в «Параметрах пользователя».
140140
141141## Указание GDB вида сборки
142142
143143GDB позволяет указать вид сборки (стиль Intel или AT&T), который будет использоваться при отображении кода сборки. Если кто-то хочет перейти на конкретный вариант, это можно изменить в свойстве AssemblerStyle в параметрах отладчика Lazarus для GDB (функция доступна в Lazarus 2.0). Альтернативно (и единственный способ добиться этого внутри Lazarus в более старых версиях до Lazarus 2.0) можно указать эту опцию, передав команду *set disassembly-flavor* в [Debugger_Startup_options](/wiki-images/5/5d/Media%3ADbg_setup_options2.png). Можно использовать несколько вариантов синтаксиса (в зависимости от версии GDB), некоторые из которых показаны ниже:
144144
145-` -ex "set disassembly-flavor intel"`\
146-` --eval-command="set disassembly-flavor intel"`\
147-` -eval-command="set disassembly-flavor intel"`\
148-` --eval-command "set disassembly-flavor intel"`
145+```text
146+ -ex "set disassembly-flavor intel"
147+ --eval-command="set disassembly-flavor intel"
148+ -eval-command="set disassembly-flavor intel"
149+ --eval-command "set disassembly-flavor intel"
150+```
149151
150152Обратите внимание, что может потребоваться сбросить отладчик *(Run \| Reset Debugger)* перед загрузкой GDB с новой настройкой.
151153
152154# Windows
153155
154156## Консольный вывод для GUI-приложений
155157
156158В Windows в среде IDE нет окна «Отладчик - вывод на консоль». Это потому, что консольные приложения открывают свое собственное окно консоли. Приложения с графическим интерфейсом по умолчанию не имеют консоли. Чтобы иметь консоль для приложения с графическим интерфейсом, необходимо изменить настройки компилятора (Project options(Параметры проекта) / Compiler Options(Параметры компилятора) / Config and Target(Настройка и целевая платформа) / Win32 Gui Application(Графическое приложение Win32): -WC / -WG)
157159
158160## Отладка приложений с правами Администратора
159161
160162В Windows Vista+ в разделе Project Options(Параметры проекта) при установке разрешений в файле манифеста для программы «от имени Администратора» программа будет запускаться с правами администратора. Если ваша IDE запущена не от имени Администратора, отладка будет запускаться нормально, программа будет отображаться в списке задач, но ее графический интерфейс не будет отображаться.
161163
162164Поэтому имейте в виду, что вы должны сопоставить уровень привилегий между IDE (и gdb) и приложением, которое необходимо отладить.
163165
164166# Win 64 bit
165167
166168- Требуется Lazarus 1.0+ (с FPC 2.6+)
167169- Рекомендуется использовать dwarf
168170
169171## Использование 32-битного Lazarus на 64-битной Windows
170172
171173В качестве альтернативы можно отлаживать приложения как 32-разрядные приложения (используя 32-разрядную версию GDB). После успешной отладки:
172174
173175- приложение может быть кросс-скомпилировано до 64 бит или
174176- можно использовать 2-ую установку Lazarus (используя другую конфигурационную опцию --primary-config-path из 32-битной Lazarus)
175177
176178При установке 32-битного Lazarus убедитесь, что вы изменили конфигурацию, чтобы использовались правильные 32-битные FPC и GDB.
177179
178180## Больше проблем и решений Win 64 bit
179181
180182См. также <http://forum.lazarus.freepascal.org/index.php/topic,13188.0/topicseen.html>
181183
182184# Win CE
183185
184186## Отладчик не находит никаких исходных файлов
185187
186188Меню: "Tools"(Сервис) Страница: "Debugger"/"Generic" (Отладчик/Общее) Поле: "Additional search path" (Дополнительный путь поиска)
187189
188190Введите в это поле букву вашего каталога проекта.
189191
190192# Linux
191193
192194## Известные проблемы
193195
194196- При использовании старой версии GDB могут возникнуть проблемы, по крайней мере, на некоторых процессорах (например, SPARC, с GDB 6.4, поставляемой Debian "Etch"). В частности, фоновые потоки могут блокироваться, даже если программа работает нормально автономно.
195197- Если ваша программа блокируется при запуске, перейдите в Tools(Сервис) / Options(Настройки) / Debugger(Отладчик) / General(Общее) и установите `DisableLoadSymbolsForLibraries=True`
196198
197199# macOS
198200
199201Под macOS вы обычно устанавливаете GDB с инструментами разработчика Apple. Версия GDB, доступная на момент написания, - 6.3.50.
200202
201203Этот раздел - первый подход к сбору информации об известных проблемах и обходных путях. Информация, представленная здесь, во многом зависит от отзывов пользователей macOS.
202204
203205Начиная с Lazarus 2.0, в среде IDE имеется отладчик на основе LLDB. Отладчик на основе GDB также может использоваться, но требует много работы по сборке и подписи кода GDB.
204206
205207## Известные проблемы (GDB)
206208
207209### Отладка 32-битного приложения на 64-битной архитектуре
208210
209211IЭто возможно, а иногда и необходимо отладить 32-битный exe-файл в 64-битной системе.
210212
211213Это возможно только с Lazarus 0.9.29 rev 28640 и выше.
212214
213215### TimeOuts (только 64 бит)
214216
215217Похоже, что некоторые команды некорректно (или не полностью) обрабатываются GDB 6.3.50. Обычно GDB заканчивает каждую команду запросом "\<gdb\>" для следующей команды. Но версия, предоставляемая Apple, иногда не может этого сделать. В этом случае IDE придется использовать тайм-аут, чтобы избежать бесконечного ожидания.
216218
217219Это было замечено с:
218220
219221- Определенными выражениями Watch (по крайней мере, если наблюдаемая переменная не была доступна в текущей выбранной функции)
220222- Обработкой исключений
221223- Вставленными точками останова (окончание последнего модуля / отсутствие кода)
222224
223225Это не может быть гарантировано:
224226
225227- что GDB не будет позже возвращать некоторые результаты от такой команды
226228- что внутреннее состояние GDB все еще действительно
227229
228230Приглашение, отображаемое для тайм-аутов, может быть отключено в конфигурации отладчика:
229231
230232Warn On Timeout
231233True/False. Автопродолжение, после тайм-аута не показывается предупреждение.
232234
233235TimeOutForEval
234236Задайте \[интервал\] в миллисекундах, как долго не срабатывает обнаружение тайм-аута (само обнаружение может занять некоторое время).
235237
236238Возможно, вам придется «СБРОСИТЬ» отладчик после внесения этих изменений.
237239
238240Больше информации смотрите здесь:
239241
240242- [<http://bugs.freepascal.org/view.php?id=19262#c47944>](http://bugs.freepascal.org/view.php?id=19262#c47944)
241243- <http://bugs.freepascal.org/view.php?id=21653>
242244
243245Альтернативное решение, похоже, заключается в использовании более новой версии GDB (см. ниже).
244246
245247### Hardware exceptions under macOS
246248
247249When a hardware exception occurs under macOS, such as an invalid pointer access (SIGSEGV) or an integer division-by-zero on Intel processors, the debugger will catch this exception at the Mach level. Normally, the system translates these Mach exceptions into Unix-style signals where the FPC run time library handles them. The debugger is however unable to propagate Mach exceptions in this way.
248250
249251The practical upshot is that it is impossible under macOS to continue a program in the debugger once a hardware exception has been triggered. This is not FPC-specific, and cannot be fixed by us.
250252
251253## Использование альтернативных отладчиков (GDB)
252254
253255Вы можете установить GDB 7.1 (или более позднюю версию), используя MacPorts, fink или homebrew.
254256
255257Было замечено следующее:
256258
257259- GDB 7.1, похоже, имеет проблемы с отладочной информацией \[режима\] stabs из fpc.
258260
259261
260262Убедитесь, что вы выбрали "generate dwarf debug information (-gw)"(генерировать отладочную информацию dwarf (-gw)) на прилагаемой вкладке project options(параметры проекта)
261263
262264**Следите за предупреждениями компоновщика "unknown stabs"**
263265
264266
265267Если у вас все еще есть проблемы, убедитесь, что никакой код вообще не скомпилирован \[в режиме\] stabs. Ваш LCL может содержать \[код, скомпилированный в режиме\] stabs, и это закончится в вашем приложении, даже если вы скомпилируете приложение с -gw. Поэтому вам, возможно, придется перекомпилировать LCL с помощью -gw (или без какой-либо отладочной информации). То же самое для любого другого модуля, пакета, RTL, ...., которые могут иметь \[код, скомпилированный в режиме\] stabs.
266268
267269**Даже при соблюдении этих правил GDB не всегда работает с приложениями, скомпилированными в fpc.**
268270
269271Эти наблюдения могут быть неполными или неправильными, пожалуйста, обновите их, если у вас есть дополнительная информация.
270272
271273Lazarus версии от 1.0 до 1.0.12
272274
273275В настройках отладчика сконфигурируйте
274276
275-` EncodeCurrentDirPath = gdfeNone`\
276-` EncodeExeFilename = gdfeNone`
277+```text
278+ EncodeCurrentDirPath = gdfeNone
279+ EncodeExeFilename = gdfeNone
280+```
277281
278282И вы должны использовать "run param", чтобы указать фактический исполняемый файл внутри пакета приложения (project.app/Content/MacOS/project или аналогичный)
279283
280284В Lazarus версии от 1.0.14 до 1.2 и выше эти шаги больше не требуются.
281285
282286## Xcode 5
283287
284288Начиная с Mavericks 10.9, Xcode 5 больше не устанавливает GDB по умолчанию и не \[делает его\] глобальным.
285289
286290- Для 10.9 вы можете установить старый Xcode 4 параллельно. Это не поддерживается Apple, поэтому он может порвать с одной из следующих версий.
287291
288292- Вы можете скомпилировать и установить GDB. См. [[GDB on OS X Mavericks and Xcode 5]].
289293
290294См., пожалуйста, [issue 25157 on mantis](http://bugs.freepascal.org/view.php?id=25157)
291295
292296- <http://forum.lazarus.freepascal.org/index.php/topic,22529.0.html> - об установке Xcode 4.3
293297- <http://forum.lazarus.freepascal.org/index.php/topic,22328.0.html> - установка gdb
294298
295299Тема "\[Lazarus\] Help: Проблемы macOS" на
296300
297301- <http://lists.lazarus.freepascal.org/pipermail/lazarus/2013-November/thread.html#84126>
298302- <http://lists.lazarus.freepascal.org/pipermail/lazarus/2013-October/thread.html#84095>
299303
300304## Замороженный UI с GDB
301305
302306Чтобы запустить программу из оболочки, вам нужно запустить «open \<program1\>.app», прямой доступ к ./program1 не даст вам доступа к пользовательскому интерфейсу. Чтобы заставить GDB работать изнутри вашей IDE, вы должны указать этот путь в качестве параметра run. Выберите в меню Run \> Run parameter и введите полный путь к хост-приложению. Например, /User/\<yourid\>/sources/myproject/project1.app/Content/MacOS/project1
303307
304308## Ссылки
305309
306310- macOS поставляется с множеством полезных инструментов для отладки и профилирования. Просто запустите /Developer/Applications/Instruments.app и попробуйте их.
307311
308312# FreeBSD
309313
310314GDB, предоставляемый системой, является древним (версия 6.1.1 во FreeBSD 9) и не очень хорошо работает с Lazarus.
311315
312316Вы можете установить более новый GDB из дерева портов, например,
313317
314318``` bash
315319cd /usr/ports/devel/gdb
316320make -DBATCH install clean
317321```
318322
319323Новый GDB находится в /usr/local/bin/gdb
320324
321325# Использование переведенного GDB (неанглийские сообщения от GDB)
322326
323327- Это относится только к Lazarus *до* 1.2 или *до* 1.0.14.\
324328 В этом больше нет необходимости.
325329
326330IDE ожидает ответов на английском языке. Если GDB переведен, это может повлиять на то, насколько хорошо IDE может его использовать.
327331
328332Во многих случаях это все еще будет работать, но с ограничениями, такими как:
329333
330334- Нет сообщений или класса для исключений
331335- Нет живого обновления потоков, пока приложение работает
332336- Сообщение об ошибке отладчика после остановки приложения (в конце отладки)
333337- другое ...
334338
335339Пожалуйста, прочитайте всю ветку: [[http://forum.lazarus.freepascal.org/index.php/topic,20756.msg120720 http://forum.lazarus.freepascal.org/index.php/topic,20756.msg120720]]
336340
337341Попробуйте запустить lazarus с
338342
339-` export LANG=en_US.UTF-8`\
340-` lazarus`
343+```text
344+ export LANG=en_US.UTF-8
345+ lazarus
346+```
341347
342348# Известные проблемы/ошибки, о которых сообщает IDE
343349
344350Сообщения    
345351
346352OС
347353
348354Описание
349355
350356 
351357
352358## During startup program exited normally
353359
354360 
355361
356362 
357363
358364**Все**
359365
360366В редких случаях в среде IDE появляется сообщение "During startup program exited normally"(Во время запуска программа завершается нормально). Это сообщение появляется, когда отлаженное приложение закрыто. Если это произойдет, никакие точки останова в приложении не будут запущены, и приложение будет работать так, как если бы не было отладчика.
361367
362368Эта ошибка может произойти по разным причинам. Есть как минимум 2 известных:
363369
364370- не зависящий от позиции exe (PIE): GDB не может переместить определенные точки останова, которые Lazarus использует для запуска exe (это происходит до того, как будут установлены какие-либо точки останова пользователя)
365371- определенные библиотеки dll/so, которые определяют те же символы, что и основной exe.
366372
367373Причин может быть еще больше. Второе происходит только при повторных запусках отладчика.
368374
369375IDE пытается обойти это, но это не всегда удается. Вполне вероятно, что в тех случаях, когда в данный момент происходит сбой, это необходимо обойти с помощью пользовательского набора настроек (см. ниже).
370376
371377Даже если вы можете обойти это, рассмотрите возможность отправки файла журнала: [[GDB Debugger Tips/ru|логирование информации для сеанса отладки]]
372378
373379Способы обхода: (все на странице options / debugger)
374380
375381- Только в случае 2: [[GDB Debugger Tips/ru|перестал работать gdb.exe]]
376382
377383Lazarus 1.2.2 и более ранние версии
378384перейдите к параметрам отладчика и в поле «debugger_startup_options» введите:\
379385--eval-command="set auto-solib-add off"
380386
381387Lazarus 1.2.4 и выше
382388перейдите к параметрам отладчика и установите для поля "DisableLoadSymbolsForLibraries" значение "True".
383389
384390Это можно использовать, только если вы не отлаживаете библиотеки (если вы не написали свою собственную библиотеку)
385391
386392- Только в случае 2: проверьте "reset debugger after each run"(сбрасывать отладчик после каждого запуска)
387393
388394Это добавляет очень небольшое увеличение времени, необходимого для запуска отладчика, так как GDB должен каждый раз перезагружаться.
389395
390396- Во всех случаях:
391397
392398Попробуйте любое из значений, доступных для «InternalStartBreak» (в сетке свойств параметров)
393399
394400## SIGFPE
395401
396402 
397403
398404 
399405
400406**Все**
401407
402408SIGFPE является исключением операций с плавающей точкой.
403409
404410Источник: [[http://forum.lazarus.freepascal.org/index.php/topic,21586.0.html forum thread]]
405411
406412Исключения SIGFPE возникают в следующей инструкции FPU; поэтому строка ошибки, которую вы получаете от Lazarus, может быть отключена/неверна.
407413
408414Delphi, а, следовательно, и Freepascal, имеют нестандартную FPEMask. Многие библиотеки C не используют исключения для проверки проблем FPU, но проверяют состояние FPU.
409415
410416Обходной путь: попробуйте изменить маску с помощью [SetExceptionMask](http://www.freepascal.org/docs-html/rtl/math/setexceptionmask.html) как можно раньше в вашей программе:
411417
412418``` pascal
413419uses math;
414420...
415421 SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide,
416422 exOverflow, exUnderflow, exPrecision])
417423```
418424
419425Если вы считаете, что в коде FPC что-то не так, вы можете использовать директиву [\$ SAFEFPUEXCEPTIONS](http://www.freepascal.org/docs-html/prog/progsu69.html). Это добавит FWAIT после каждого сохранения значения FPU в памяти. Большинство операций FPC с плавающей запятой и двойных операций заканчиваются сохранением результата где-то в памяти, поэтому в результате отладчик останавливается на правильной строке FPC. FWAIT - недопустимая задача для FPU, но она вызовет немедленное возникновение исключения, а не где-то дальше по вашему коду. Это не делается по умолчанию, потому что это сильно замедляет операции с плавающей запятой.
420426
421427## Error 193 (Error creating process / Exe not found)
422428
423429 
424430
425431 
426432
427433**Windows**
428434
429435Подробнее см. [здесь](http://bugs.freepascal.org/view.php?id=18238).
430436
431437Эта проблема наблюдалась в Win XP и, по-видимому, вызвана самой Windows. Проблема возникает, если путь к вашему приложению имеет пробел, и существует второй путь/файл, имя которого совпадает с частью пути перед пробелом, например:
432438
433439
434440Ваше приложение: C:\test folder\project1.exe
435441
436442Какой-то файл: C:\test
437443
438444## SigSegV - даже с новым пустым приложением
439445
440446 
441447
442448 
443449
444450**Windows**
445451
446452Примечание
447453в большинстве случаев SigSegV - просто ошибка в вашем коде.
448454
449455Нижеследующее применимо только \[в том случае\], если вы получаете SigSegv даже с новым пустым приложением (пустая форма и никаких изменений, внесенных в unit1).
450456
451457Иногда SigSegV может быть вызван несовместимостью между GDB и некоторыми другими продуктами. Не известно, является ли это проблемой GDB или вызвано другим продуктом. Нет никаких признаков того, что какой-либо из перечисленных продуктов каким-либо образом виноват. Предоставленная информация может относиться только к некоторым версиям названных продуктов:
452458
453459Comodo firewall
454460[Lazarus cant run with comodo firewall](http://forum.lazarus.freepascal.org/index.php/topic,7065.msg60621.html#msg60621)
455461
456462BitDefender
457463включен режим игры
458464
459465## SigSegV - и продолжить отладку
460466
461467 
462468
463469 
464470
465471**Windows**, **Mac**
466472
467473[Bug 10004 - gdb cannot continue after SIGFPE or SIGSEGV happen on windows](http://sourceware.org/bugzilla/show_bug.cgi?id=10004)
468474
469475[Workaround for SIGFPE bug in GDB for Windows?](http://forum.lazarus.freepascal.org/index.php/topic,18121.msg101798.html#msg101798)
470476
471477## На Windows Open/Save/File или System Dialog вызывает сбой GDB
472478
473479См. следующую запись [[GDB Debugger Tips/ru|перестал работать gdb.exe]]
474480
475481Или загрузите "alternative GDB"(альтернативный GDB) 7.7.1 (Win32) с сайта Lazarus SourceForge.
476482
477483## "Step over" шаги внутри функции (Win 64)
478484
479485 
480486
481487 
482488
483489**Windows 64**
484490
485491Иногда нажатие клавиши F8 не переходит \[мимо\] функции, а входит в нее.
486492
487493Можно продолжить с F8, и иногда GDB возвращается в вызывающую функцию после 1-го или 2-ого дальнейших шагов (переступая через оставшуюся часть функции).
488494
489495В Lazarus 2.0 обходной путь был добавлен, но его необходимо включить. Перейдите в Tools(Сервис) \> Options(Настройки) \> Debugger(Отладчик) и включите (в сетке свойств) «FixIncorrectStepOver».
490496
491497## Перестал работать gdb.exe
492498
493499 
494500
495501 
496502
497503**Windows**
498504
499505Поврежден сам GDB. Это будет связано с ошибкой в GDB и может быть невозможно исправить в Lazarus. Тем не менее, возможно, стоит отправить информацию (см. Раздел «Сообщения об ошибках» ниже). Возможно, Лазарус может избежать вызова неисправной функции.
500506
501507Есть одна уже известная ситуация. GDB (от 6,6 до 7,4 (последний на момент тестирования)) может аварийно завершить работу во время запуска вашего приложения или сразу после его остановки. Это происходит во время загрузки библиотек (DLL) для вашего приложения (смотрите окно «[[IDE Window: Debug Output/ru|Debug output]]»).
502508
503509Lazarus 1.2.2 и более ранние версии
504510перейдите к параметрам отладчика и в поле «debugger_startup_options» введите:\
505511--eval-command="set auto-solib-add off"
506512
507513Lazarus 1.2.4 и выше
508514перейдите к параметрам отладчика и установите для поля «DisableLoadSymbolsForLibraries» значение «True».
509515
510516Это можно использовать, только если вы не отлаживаете в библиотеках (если вы не написали свою собственную библиотеку) ![](/wiki-images/a/a9/Gdb_start_opt_nolib.png)
511517
512518## internal-error: clear_dangling_display_expressions
513519
514520 
515521
516522 
517523
518524**Windows, может быть другая ОС**
519525
520526В конце сеанса отладки отладчик сообщает:
521527
522-`internal-error: clear_dangling_display_expressions: `\
523-`` Assertion `objfile->pspace == solib->pspace' failed. ``
528+```text
529+internal-error: clear_dangling_display_expressions:
530+Assertion `objfile->pspace == solib->pspace' failed.
531+```
524532
525533Это ошибка в GDB, и иногда решается так:
526534
527535Lazarus 1.2.2 и более ранние версии
528536перейдите к параметрам отладчика и в поле "debugger_startup_options" введите:
529537
530-`--eval-command="set auto-solib-add off" `
538+```text
539+--eval-command="set auto-solib-add off"
540+```
531541
532542Lazarus 1.2.4 и выше
533543перейдите к параметрам отладчика и установите для поля "DisableLoadSymbolsForLibraries" значение "True"
534544
535545Это можно использовать, только если вы не отлаживаете библиотеку (если вы не пишете свою собственную библиотеку)
536546
537547## "PC register is not available" ("SuspendThread failed. (winerr 5)")
538548
539549 
540550
541551 
542552
543553**Windows**
544554
545555GDB может упасть с этим сообщением. Это связано с [Bug 14018](http://sourceware.org/bugzilla/show_bug.cgi?id=14018). Если вы получаете эту проблему, вы можете при желании перейти с GDB 7.4 на GDB 7.2
546556
547557## Can not insert breakpoint (Не могу вставить точку останова)
548558
549559 
550560
551561 
552562
553563**Все**
554564
555565Для точек останова с отрицательными числами: См. сюда, плз: [How to reset gdb settings](http://forum.lazarus.freepascal.org/index.php/topic,10317.msg121818.html#msg121818)
556566
557567Вы также можете попробовать:
558568
559569Lazarus 1.2.2 и более ранние версии
560570перейдите к параметрам отладчика и в поле «debugger_startup_options» введите:\
561571--eval-command="set auto-solib-add off"
562572
563573Lazarus 1.2.4 и выше
564574перейдите к параметрам отладчика и установите для поля «DisableLoadSymbolsForLibraries» значение «True».
565575
566576Это можно использовать, только если вы не отлаживаете библиотеку (если вы не пишете свою собственную библиотеку)
567577
568578Для точек останова с положительными числами Это может произойти из-за неправильных [[Debugger Setup/ru|настроек отладчика]]. Убедитесь, что интеллектуальные ссылки отключены. Обычно это означает, что точка останова находится в процедуре, которая не вызывается и не включается в ваш исполняемый файл.
569579
570580В Windows, если это происходит несмотря на правильную настройку, добавьте -Xe (внешний компоновщик) к пользовательским параметрам.
571581
572582# Сообщения об ошибках
573583
574584- Вы проверили свои [[Debugger Setup/ru|настройки отладчика]]?
575585- Вы пробовали \[переключать в режим\] Dwarf и Stabs
576586
577587## Проверьте существующие отчеты
578588
579589Пожалуйста, проверьте каждую из следующих ссылок
580590
581591- [Search Mantis for category "debugger"](http://bugs.freepascal.org/search.php?project_id=0&category=Debugger&status_id%5B%5D=10&status_id%5B%5D=20&status_id%5B%5D=30&status_id%5B%5D=40&status_id%5B%5D=50&status_id%5B%5D=80&sticky_issues=on&sortby=last_updated&dir=DESC&per_page=250&hide_status_id=-2)
582592- [Search Mantis for text "debugger"](http://bugs.freepascal.org/search.php?project_id=1&search=debugger&category%5B%5D=-&category%5B%5D=Compiler&category%5B%5D=Converter&category%5B%5D=Custom+Drawn&category%5B%5D=Database&category%5B%5D=Database+Components&category%5B%5D=Documentation&category%5B%5D=FCL&category%5B%5D=FPSpreadsheet&category%5B%5D=FV&category%5B%5D=Free+Vision&category%5B%5D=IDE&category%5B%5D=Installer&category%5B%5D=LCL&category%5B%5D=LazDataDesktop&category%5B%5D=LazReport&category%5B%5D=Misc&category%5B%5D=OnGuard&category%5B%5D=Other&category%5B%5D=Packages&category%5B%5D=Patch&category%5B%5D=Printer&category%5B%5D=RTL&category%5B%5D=TAChart&category%5B%5D=Utilities&category%5B%5D=Virtual+Treeview&category%5B%5D=Web+site&category%5B%5D=Website&category%5B%5D=Widgetset&category%5B%5D=glscene&category%5B%5D=lNet&category%5B%5D=rx&status_id%5B%5D=10&status_id%5B%5D=20&status_id%5B%5D=30&status_id%5B%5D=40&status_id%5B%5D=50&status_id%5B%5D=80&sticky_issues=on&sortby=last_updated&dir=DESC&per_page=250&hide_status_id=-2)
583593- [Search Mantis for text "gdb"](http://bugs.freepascal.org/search.php?project_id=1&search=gdb&category%5B%5D=-&category%5B%5D=Compiler&category%5B%5D=Converter&category%5B%5D=Custom+Drawn&category%5B%5D=Database&category%5B%5D=Database+Components&category%5B%5D=Documentation&category%5B%5D=FCL&category%5B%5D=FPSpreadsheet&category%5B%5D=FV&category%5B%5D=Free+Vision&category%5B%5D=IDE&category%5B%5D=Installer&category%5B%5D=LCL&category%5B%5D=LazDataDesktop&category%5B%5D=LazReport&category%5B%5D=Misc&category%5B%5D=OnGuard&category%5B%5D=Other&category%5B%5D=Packages&category%5B%5D=Patch&category%5B%5D=Printer&category%5B%5D=RTL&category%5B%5D=TAChart&category%5B%5D=Utilities&category%5B%5D=Virtual+Treeview&category%5B%5D=Web+site&category%5B%5D=Website&category%5B%5D=Widgetset&category%5B%5D=glscene&category%5B%5D=lNet&category%5B%5D=rx&status_id%5B%5D=10&status_id%5B%5D=20&status_id%5B%5D=30&status_id%5B%5D=40&status_id%5B%5D=50&status_id%5B%5D=80&sticky_issues=on&sortby=last_updated&dir=DESC&per_page=250&hide_status_id=-2)
584594- [Search Mantis for text "dwarf"](http://bugs.freepascal.org/search.php?project_id=0&search=dwarf&category%5B%5D=-&category%5B%5D=Compiler&category%5B%5D=Converter&category%5B%5D=Custom+Drawn&category%5B%5D=Database&category%5B%5D=Database+Components&category%5B%5D=Documentation&category%5B%5D=FCL&category%5B%5D=FPSpreadsheet&category%5B%5D=FV&category%5B%5D=Free+Vision&category%5B%5D=IDE&category%5B%5D=Installer&category%5B%5D=LCL&category%5B%5D=LazDataDesktop&category%5B%5D=LazReport&category%5B%5D=Misc&category%5B%5D=OnGuard&category%5B%5D=Other&category%5B%5D=Packages&category%5B%5D=Patch&category%5B%5D=Printer&category%5B%5D=RTL&category%5B%5D=TAChart&category%5B%5D=Utilities&category%5B%5D=Virtual+Treeview&category%5B%5D=Web+site&category%5B%5D=Website&category%5B%5D=Widgetset&category%5B%5D=glscene&category%5B%5D=lNet&category%5B%5D=rx&status_id%5B%5D=10&status_id%5B%5D=20&status_id%5B%5D=30&status_id%5B%5D=40&status_id%5B%5D=50&status_id%5B%5D=80&sticky_issues=on&sortby=last_updated&dir=DESC&per_page=250&hide_status_id=-2)
585595- [Search Mantis for text "stabs"](http://bugs.freepascal.org/search.php?project_id=0&search=stabs&category%5B%5D=-&category%5B%5D=Compiler&category%5B%5D=Converter&category%5B%5D=Custom+Drawn&category%5B%5D=Database&category%5B%5D=Database+Components&category%5B%5D=Documentation&category%5B%5D=FCL&category%5B%5D=FPSpreadsheet&category%5B%5D=FV&category%5B%5D=Free+Vision&category%5B%5D=IDE&category%5B%5D=Installer&category%5B%5D=LCL&category%5B%5D=LazDataDesktop&category%5B%5D=LazReport&category%5B%5D=Misc&category%5B%5D=OnGuard&category%5B%5D=Other&category%5B%5D=Packages&category%5B%5D=Patch&category%5B%5D=Printer&category%5B%5D=RTL&category%5B%5D=TAChart&category%5B%5D=Utilities&category%5B%5D=Virtual+Treeview&category%5B%5D=Web+site&category%5B%5D=Website&category%5B%5D=Widgetset&category%5B%5D=glscene&category%5B%5D=lNet&category%5B%5D=rx&status_id%5B%5D=10&status_id%5B%5D=20&status_id%5B%5D=30&status_id%5B%5D=40&status_id%5B%5D=50&status_id%5B%5D=80&sticky_issues=on&sortby=last_updated&dir=DESC&per_page=250&hide_status_id=-2)
586596
587597### Баги в GDB
588598
589599Описание
590600
591601ОС
592602
593603GDB Version(s)
594604
595605Ссылка
596606
597607Падение на win64 с неправильными символами dwarf2
598608
599609win64
600610
601611GDB 7.4 (может быть и выше)
602612
603613<http://sourceware.org/bugzilla/show_bug.cgi?id=14014>
604614
605615Отладчик не видит переменные окружения, установленные в переменной окружения
606616
607617win
608618
609619Решено в GDB 7.4
610620
611621<http://sourceware.org/bugzilla/show_bug.cgi?id=10989>
612622
613623Win32 падает с ошибкой "winerr 5" (реестр ПК недоступен)\
614624*очевидно* не проявляется от 7.0 до 7.2
615625
616626win
617627
618628GDB 7.3 и выше (может быть также в 6.x)\
619629Кажется, должно быть исправлено в 7.7.1
620630
621631<http://sourceware.org/bugzilla/show_bug.cgi?id=14018>
622632
623633Неверный индекс массива с dwarf
624634
625635*
626636
627637GDB от 7.3 до 7.5 (может быть в 7.6.0)\
628638исправлено в 7.6.1
629639
630640<http://sourceware.org/bugzilla/show_bug.cgi?id=15102>
631641
632642GDB падает, если пытается проверить или просмотреть строки ресурсов\
633643протестировано только на win32, не известно только для других платформ, если используется dwarf
634644
635645*
636646
637647GDB от 7.0 до 7.2.xx
638648
639649Записи (особенно: указатель на запись) могут быть ошибочно приняты за classes/objects\
640650Данные/значения отображаются корректно / ожидаются дальнейшие тесты\
641651Это также влияет на способность проверять короткие строки shortstring
642652
643653*
644654
645655GDB 7.6.1 и выше (проверено и не работает до GDB 8.1)
646656
647657<https://sourceware.org/bugzilla/show_bug.cgi?id=16016>
648658
649659Объектные переменные (члены) методов текущего класса (self.xxx) не могут быть отслежены/проверены\
650660Чтобы обойти, используйте верхний регистр или префикс в виде self.
651661
652662*
653663
654664GDB от 7.7 до 7.9.0 (включительно)\
655665Обходной путь присутствует в Lazarus 1.4 и выше
656666
657667<https://sourceware.org/bugzilla/show_bug.cgi?id=17835>
658668
659669GDB не может продолжить работу после SIGFPE или SIGSEGV на Windows
660670
661671win
662672
663673*
664674
665675<https://sourceware.org/bugzilla/show_bug.cgi?id=10004>
666676
667677GDB усекает значения для "const x = qword(...)"
668678
669679Win х64\
670680может быть и другие
671681
672682Исправлено в GDB 7.7 и выше, возможно, исправлено даже между 7.3 и 7.7
673683
674684### Проблемы с GDB 7.5.9 или 7.6
675685
676686Существуют различные сообщения (не подтвержденные) для разных платформ о сбоях в gdb 7.5.9 или 7.6.
677687
678688Настоятельно рекомендуется не использовать эти версии.
679689
680690- <http://bugs.freepascal.org/view.php?id=24401>
681691- <http://forum.lazarus.freepascal.org/index.php/topic,20756.msg120842.html#msg120842>
682692- <http://sourceware.org/bugzilla/show_bug.cgi?id=15453>
683693
684694## Create a new Report (GDB and LLDB)
685695
686696Если вы когда-либо в прошлом обновляли, изменяли, переустанавливали свой Lazarus, тогда, пожалуйста, проверьте диалоговое окно "Options"(Параметры) ("Environment"(Окружение) или меню "Tools"(Сервис)) для \[проверки\] версии используемых GDB и FPC. Они все еще могут указывать на старые настройки.
687697
688698### Основная информация
689699
690700- Ваша операционная система и версия
691701- Ваш CPU (Intel, Power, ...) х32 или х64
692702- Версия...
693703 - Lazarus (последний стабильный релиз или ревизия SVN) (включите настройки, использующие перекомпиляцию LCL, пакетов или IDE (если используется пользовательская компиляция Lazarus))
694704 - FPC, если отличается от значения по умолчанию. Пожалуйста, проверьте диалоговое окно "Options"(Настройки)("Environment"(Окружение) или меню "Tools"(Сервис))
695705 - GDB, пожалуйста, проверьте диалоговое окно "Options"(Настройки)("Environment"(Окружение) или меню "Tools"(Сервис))
696706- Настройки компилятора: (меню: "Project"(Проект), "Project Options"(Настройки проекта), указать все настройки, которые вы использовали)
697707 - Страница "Compilation and linking"(Компиляция и компоновка)
698708
699709
700710
701711фрейм "Optimization levels"(Уровни оптимизации) (-O???): Level (-O1 / ...) Other (-OR -Ou -Os) (Пожалуйста, всегда тестируйте с отключенной оптимизацией, и -O1)
702712
703713фрейм "Linking"(Компоновка)
704714
705715
706716Smart Link(Умная компоновка) (-XX); Должно быть отключено(снята галочка)
707717
708718- - Страница "Debugging"(Отладка)
709719
710720
711721
712722фрейм "Debugger Info"(Отладочная информация): (-g -gl -gw) (Пожалуйста, убедитесь, что используется как минимум -g или -gw)
713723
714724
715725Strip Symbols from executable(Вырезать символы из исполняемого файла) (-Xs); Должно быть отключено (снята галочка)
716726
717727### Логирование информации для сеанса отладки
718728
719729
720730Запустите Lazarus со следующими параметрами:
721731
722-` --debug-log=LOG_FILE  --debug-enable=DBG_CMD_ECHO,DBG_STATE,DBG_DATA_MONITORS,DBGMI_QUEUE_DEBUG,DBGMI_TYPE_INFO,DBG_ERRORS`
732+```text
733+ --debug-log=LOG_FILE --debug-enable=DBG_CMD_ECHO,DBG_STATE,DBG_DATA_MONITORS,DBGMI_QUEUE_DEBUG,DBGMI_TYPE_INFO,DBG_ERRORS
734+```
723735
724736:;На Windows: вам нужно создать ярлык для Lazarus.exe (например, на рабочем столе) и отредактировать его свойства. Добавьте " --debug-log=C:\laz.log --debug-enable=..." в командную строку.
725737
726738:;На Linux: запустите Lazarus из оболочки и добавьте " --debug-log=/home/yourname/laz.log --debug-enable=..." в командную строку
727739
728740:;На macOS: запустите Lazarus из оболочки /path/to/lazarus/lazarus.app/Contents/MacOS/lazarus --debug-log=/path/to/yourfiles/laz.log --debug-enable=...
729741
730742Приложите файл журнала после воспроизведения ошибки.
731743
732744Если вы не можете сгенерировать файл журнала, попробуйте открыть окно "Debug output"(Вывод отладки) (из меню "View"(Вид) -\> "Ide Internals"(Внутреннее состояние IDE)). Вы должны открыть его перед запуском приложения (по F9). А затем запустите ваше приложение. После возникновения ошибки скопируйте, заархивируйте и прикрепите содержимое окна "Debug output"(Вывод отладки).
733745
734746# Тестовые запуски
735747
736748Если вы используете другую версию GDB, вы можете запустить тестовый пример. Обратите внимание, что не все тесты имеют правильные ожидания для каждой возможной установки. Поэтому некоторые тесты могут не работать на некоторых системах.
737749
738750Тест отладчика находится в каталоге:
739751
740752- Lazarus 1.2.x: debugger\test\Gdbmi\\
741753- Lazarus 1.3 и выше: components\lazdebuggergdbmi\test\\
742754
743755В приведенном ниже пути используется v.1.3. Если используется 1.2.x, замените его соответствующим образом.
744756
745757Одноразовая настройка
746758
747759Создайте каталог components\lazdebuggergdbmi\test\Logs: Необязательно, но помогает хранить результат теста в одном месте
748760
749761Создайте конфигурационные файлы: В каталоге components\lazdebuggergdbmi\test\\
750762
751763
752764copy fpclist.txt.sample to fpclist.txt
753765
754766copy gdblist.txt.sample to gdblist.txt
755767
756768откройте 2 текстовых файла и отредактируйте путь к fpc/gdb, а также отредактируйте версию (тест может запускать разные тесты для разных версий). Можно указать более одного GDB/FPC
757769
758770Запуск теста
759771
760772- Откройте проект: components\lazdebuggergdbmi\test\TestGdbmi.lpi
761773- Только для Lazarus 1.2.x: пересоберите IDE с опцией "Clean"(Очистить) (Меню "Tools"(Сервис) --\> "Configure build Lazarus"(Параметры сборки Lazarus) --\> снять галочку с "Restart after building IDE"(Перезапускать после сборки IDE)). Если это пропущено, компиляция проекта может завершиться неудачно. Если компиляция не удалась, ВСЕ *.ppu/*.o файлы в \[папке\] lazdebuggergdbmi\test должны быть удалены вручную.
762774- Запустите проект (если тест не прошел, возможно, вам придется удалить файлы *.exe в components\lazdebuggergdbmi\test\TestApps)
763775
764776# Ссылки
765777
766778## Внешние ссылки
767779
768780- [Официальный сайт GDB](https://www.gnu.org/software/gdb/)
769781
770782## Экспериментальные отладчики в Паскале
771783
772784Это работа в процессе:
773785
774786- [duby](http://sourceforge.net/projects/duby/)
775787- [fpdebug](https://github.com/graemeg/fpdebug) от Graeme Geldenhuys
776788- [vdbg](https://code.google.com/p/vdbg/)
777789- fpdebug in Lazarus/components/fpdebug and debugger/components/fpgdbmidebugger
778790- [blog](http://lazarus-dev.blogspot.co.uk/2014/05/de-bug-wars-new-hope.html)
779791- [[FpGdbmiDebugger]]
780792
781793- [How to register debugger from package?](http://forum.lazarus.freepascal.org/index.php/topic,22252.0.html)
782794
783795## Связанные темы форума
784796
785797- [Issues (crash) with gdb 7.6.2 on arch linux](http://forum.lazarus.freepascal.org/index.php/topic,23221.0.html)
786798- [About the LLDB based debugger](https://forum.lazarus.freepascal.org/index.php/topic,42869.0.html)
787799
788800---
789801*From the Free Pascal wiki, page "GDB Debugger Tips/ru", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
790802Category: Debugging

Back to history