(gdb)
<-gdb-set confirm off>
^done
(gdb)
<-gdb-set new-console off>
&»No symbol table is loaded. Use the «file» command.n»
^error,msg=»No symbol table is loaded. Use the «file» command.»
(gdb)
<-gdb-version>
~»GNU gdb 6.6-alt3 (ALT Linux)n»
~»Copyright (C) 2006 Free Software Foundation, Inc.n»
~»GDB is free software, covered by the GNU General Public License, and you aren»
~»welcome to change it and/or distribute copies of it under certain conditions.n»
~»Type «show copying» to see the conditions.n»
~»There is absolutely no warranty for GDB. Type «show warranty» for details.n»
~»This GDB was configured as «i586-alt-linux».n»
^done
(gdb)
<-gdb-set env BASH_ENV=/home/kubanych/.bashrc>
^done
(gdb)
<-gdb-set env BROWSER=/usr/bin/xbrowser>
^done
(gdb)
<-gdb-set env CVS_RSH=ssh>
^done
(gdb)
<-gdb-set env DBUS_SESSION_BUS_ADDRESS=unix:abstract=/var/run/dbus/users/dbus-lZaPwtJtzw,guid=287891479a49bd3b48b6748f4b4503a9>
^done
(gdb)
<-gdb-set env DBUS_SESSION_BUS_PID=12716>
^done
(gdb)
<-gdb-set env DESKTOP_SESSION=default>
^done
(gdb)
<-gdb-set env DISPLAY=:0.0>
^done
(gdb)
<-gdb-set env DM_CONTROL=/var/run/xdmctl>
^done
(gdb)
<-gdb-set env G_BROKEN_FILENAMES=1>
^done
(gdb)
<-gdb-set env GDK_PIXBUF_MODULEDIR=/usr/lib/gtk-2.0/2.10.0/loaders>
^done
(gdb)
<-gdb-set env G_FILENAME_ENCODING=utf8>
^done
(gdb)
<-gdb-set env GS_LIB=/home/kubanych/.fonts>
^done
(gdb)
<-gdb-set env GTK2_RC_FILES=/usr/share/themes/QtCurve/gtk-2.0/gtkrc:/etc/gtk-2.0/gtkrc:/home/kubanych/.gtkrc-2.0::/home/kubanych/.kde4/share/config/gtkrc-2.0>
^done
(gdb)
<-gdb-set env GTK_PATH=/usr/lib/gtk-2.0/2.10.0>
^done
(gdb)
<-gdb-set env GTK_RC_FILES=/usr/share/themes/Industrial/gtk/gtkrc:/etc/gtk/gtkrc:/home/kubanych/.gtkrc::/home/kubanych/.kde4/share/config/gtkrc>
^done
(gdb)
<-gdb-set env HELP_BROWSER=/usr/bin/xbrowser>
^done
(gdb)
<-gdb-set env HISTFILESIZE=9999>
^done
(gdb)
<-gdb-set env HISTSIZE=999>
^done
(gdb)
<-gdb-set env HOME=/home/kubanych>
^done
(gdb)
<-gdb-set env HOSTNAME=host-15.localdomain>
^done
(gdb)
<-gdb-set env JAVA_HOME=/usr/lib/jvm/java>
^done
(gdb)
<-gdb-set env KDE_FULL_SESSION=true>
^done
(gdb)
<-gdb-set env KDE_MULTIHEAD=false>
^done
(gdb)
<-gdb-set env KDE_SESSION_UID=500>
^done
(gdb)
<-gdb-set env KDE_SESSION_VERSION=4>
^done
(gdb)
<-gdb-set env LANG=ru_RU.UTF-8>
^done
(gdb)
<-gdb-set env LESSKEY=/etc/.less>
^done
(gdb)
<-gdb-set env LESS=-MM>
^done
(gdb)
<-gdb-set env LESSOPEN=|/usr/share/less/lesspipe.sh %s>
^done
(gdb)
<-gdb-set env LOGNAME=kubanych>
^done
(gdb)
<-gdb-set env LS_COLORS=>
~»Setting environment variable «LS_COLORS» to null value.n»
^done
(gdb)
<-gdb-set env MAIL=/var/mail/kubanych>
^done
(gdb)
<-gdb-set env PATH=/usr/lib/kde4/bin:/usr/lib/kde4bin:/home/kubanych/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/X11R6/bin>
^done
(gdb)
<-gdb-set env PWD=/home/kubanych>
^done
(gdb)
<-gdb-set env QTDIR=/usr/lib/qt3/>
^done
(gdb)
<-gdb-set env QTINC=/usr/lib/qt3/include/>
^done
(gdb)
<-gdb-set env QTLIB=/usr/lib/qt3/lib/>
^done
(gdb)
<-gdb-set env QT_PLUGIN_PATH=/home/kubanych/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/>
^done
(gdb)
<-gdb-set env SESSION_MANAGER=local/host-15.localdomain:/tmp/.ICE-unix/13454>
^done
(gdb)
<-gdb-set env SHELL=/bin/bash>
^done
(gdb)
<-gdb-set env SHLVL=1>
^done
(gdb)
<-gdb-set env SSH_AGENT_PID=12726>
^done
(gdb)
<-gdb-set env SSH_AUTH_SOCK=/home/kubanych/.ssh/agent>
^done
(gdb)
<-gdb-set env TMPDIR=/home/kubanych/tmp>
^done
(gdb)
<-gdb-set env USER=kubanych>
^done
(gdb)
<-gdb-set env _=/usr/lib/kde4/bin/kdeinit4>
^done
(gdb)
<-gdb-set env WINDOWPATH=7>
^done
(gdb)
<-gdb-set env XAUTHORITY=/home/kubanych/.Xauthority>
^done
(gdb)
<-gdb-set env XCURSOR_PATH=/usr/share/kde4/share/icons::~/.icons:/usr/share/icons:/usr/share/pixmaps:/usr/X11R6/lib/X11/icons>
^done
(gdb)
<-gdb-set env XCURSOR_THEME=Oxygen_Black>
^done
(gdb)
<-gdb-set env XDG_CACHE_HOME=/home/kubanych/.cache>
^done
(gdb)
<-gdb-set env XDG_CONFIG_HOME=/home/kubanych/.config>
^done
(gdb)
<-gdb-set env XDG_DATA_DIRS=/usr/share:/var/cache>
^done
(gdb)
<-gdb-set env XDG_DATA_HOME=/home/kubanych/.local/share>
^done
(gdb)
<-gdb-set env XDG_SESSION_COOKIE=494ad00d2821f4d414e057424b44bfce-1262814119.648610-1148803377>
^done
(gdb)
<-gdb-set env XDM_MANAGED=method=classic>
^done
(gdb)
<-file-exec-and-symbols «/usr/bin/xterm»>
~»(no debugging symbols found)n»
~»Using host libthread_db library «/lib/libthread_db.so.1″.n»
^done
(gdb)
<-environment-cd .>
^done
(gdb)
<-environment-cd «/tmp/»>
^done
(gdb)
<-data-evaluate-expression FPC_THREADVAR_RELOCATE_PROC>
&»No symbol table is loaded. Use the «file» command.n»
^error,msg=»No symbol table is loaded. Use the «file» command.»
(gdb)
<info functions FPC_CPUINIT>
&»info functions FPC_CPUINITn»
~»All functions matching regular expression «FPC_CPUINIT»:n»
^done
(gdb)
<info functions $$_RUNERROR$>
&»info functions $$_RUNERROR$n»
~»All functions matching regular expression «$$_RUNERROR$»:n»
^done
(gdb)
<-exec-arguments -T ‘Lazarus Run Output’ -e /usr/lib/lazarus//tools/runwait.sh /tmp/project1>
^done
(gdb)
<-gdb-set language pascal>
^done
(gdb)
<info address main>
&»info address mainn»
&»No symbol «main» in current context.n»
^error,msg=»No symbol «main» in current context.»
(gdb)
<-break-insert -t main>
&»Function «main» not defined.n»
^done
(gdb)
<-break-insert FPC_RAISEEXCEPTION>
&»Function «FPC_RAISEEXCEPTION» not defined.n»
^done
(gdb)
<-break-insert FPC_BREAK_ERROR>
&»Function «FPC_BREAK_ERROR» not defined.n»
^done
(gdb)
<-break-insert FPC_RUNERROR>
&»Function «FPC_RUNERROR» not defined.n»
^done
(gdb)
<info file>
&»info filen»
~»Symbols from «/usr/bin/xterm».n»
~»Local exec file:n»
~»t`/usr/bin/xterm’, file type elf32-i386.n»
~»tEntry point: 0x804ca70n»
~»t0x08048154 — 0x08048167 is .interpn»
~»t0x08048168 — 0x08048188 is .note.ABI-tagn»
~»t0x08048188 — 0x080481ac is .note.gnu.build-idn»
~»t0x080481ac — 0x08048310 is .gnu.hashn»
~»t0x08048310 — 0x080497e0 is .dynsymn»
~»t0x080497e0 — 0x0804a9a3 is .dynstrn»
~»t0x0804a9a4 — 0x0804ac3e is .gnu.versionn»
~»t0x0804ac40 — 0x0804acd0 is .gnu.version_rn»
~»t0x0804acd0 — 0x0804ad60 is .rel.dynn»
~»t0x0804ad60 — 0x0804b6f8 is .rel.pltn»
~»t0x0804b6f8 — 0x0804b728 is .initn»
~»t0x0804b728 — 0x0804ca68 is .pltn»
~»t0x0804ca70 — 0x0808331c is .textn»
~»t0x0808331c — 0x08083338 is .finin»
~»t0x08083340 — 0x080911d0 is .rodatan»
~»t0x080911d0 — 0x080911ec is .eh_frame_hdrn»
~»t0x080911ec — 0x08091244 is .eh_framen»
~»t0x08092ecc — 0x08092ed4 is .ctorsn»
~»t0x08092ed4 — 0x08092edc is .dtorsn»
~»t0x08092edc — 0x08092ee0 is .jcrn»
~»t0x08092ee0 — 0x08092ff0 is .dynamicn»
~»t0x08092ff0 — 0x08092ff4 is .gotn»
~»t0x08092ff4 — 0x080934cc is .got.pltn»
~»t0x080934e0 — 0x08097b9c is .datan»
~»t0x08097ba0 — 0x08098fb8 is .bssn»
^done
(gdb)
<-exec-run>
^running
(gdb)
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
~»(no debugging symbols found)n»
*stopped,reason=»exited-normally»
(gdb)
<-file-exec-and-symbols >
^done
(gdb)
<info program>
&»info programn»
~»The program being debugged is not being run.n»
^done
(gdb)
382 / 181 / 47 Регистрация: 11.07.2013 Сообщений: 979 |
|
1 |
|
16.12.2014, 12:26. Показов 4080. Ответов 8
Подключаю модуль Printers (соответствующие пакеты установлены), Миниатюры
0 |
Супер-модератор 32456 / 20948 / 8107 Регистрация: 22.10.2011 Сообщений: 36,218 Записей в блоге: 7 |
|
16.12.2014, 14:08 |
2 |
Чем вызвана ошибка GDB-отладчика Глюками Лазаруса. Очень часто происходит подобное, к сожалению, и не только при работе с диалогами.
1 |
382 / 181 / 47 Регистрация: 11.07.2013 Сообщений: 979 |
|
16.12.2014, 15:48 [ТС] |
3 |
А что можно сделать в таком случае? Добавлено через 51 секунду
0 |
Супер-модератор 32456 / 20948 / 8107 Регистрация: 22.10.2011 Сообщений: 36,218 Записей в блоге: 7 |
|
16.12.2014, 16:14 |
4 |
что можно сделать в таком случае? Вот это можно попробовать: gdb.exe has stopped working
1 |
382 / 181 / 47 Регистрация: 11.07.2013 Сообщений: 979 |
|
16.12.2014, 19:42 [ТС] |
6 |
Извиняюсь, с первого раза не получилось добавить скриншот. Вопрос закрыт!
0 |
382 / 181 / 47 Регистрация: 11.07.2013 Сообщений: 979 |
|
16.12.2014, 20:22 [ТС] |
7 |
Продолжил разбираться дальше:
0 |
382 / 181 / 47 Регистрация: 11.07.2013 Сообщений: 979 |
|
17.12.2014, 09:45 [ТС] |
8 |
Сегодня решил проверить на других компьютерах, с установленным Лазарусом 1.3. Результат не обрадовал — в ряде случаев, несмотря на инструкцию —eval_command=”set auto-solib-add off” ошибка повторилась. А вот с такой настройкой привести к повторению ошибки не удалось: Буду использовать этот вариант.
0 |
Супер-модератор 32456 / 20948 / 8107 Регистрация: 22.10.2011 Сообщений: 36,218 Записей в блоге: 7 |
|
17.12.2014, 13:37 |
9 |
Это подразумевалось изначально, там же написано: Lazarus 1.2.4 and higher , зачем понадобилось менять другие настройки, когда версия Лазаруса выше 1.2.4 — непонятно совершенно…
0 |
│
English (en) │
русский (ru) │
Вступление
Lazarus поставляется с GDB в качестве отладчика по умолчанию.
Начиная с Lazarus 2.0, это значение по умолчанию изменилось на LLDB на MacO.
- Эта страница для Lazarus 1.0 и новее. Для более старых версий см. предыдущая версия этой страницы
- Примечание по GDB 7.5: GDB 7.5 не поддерживается выпущенной версией 1.0. Исправления для поддержки были сделаны в 1.1.
См.также
Установка (GDB и LLDB)
Чтобы получить наилучшие результаты, вы должны убедиться, что ваша IDE и Project правильно настроены.
См. раздел установка отладчика, чтобы настроить IDE и ваш проект для использования отладчика.
Setup Video Tutorial
Другое
Debugging console applications
Основное
Тип отладочной информации (GDB и LLDB)
Примечание: Эти настройки применяются только к проекту или пакету, для которого они установлены. Если вы изменяете настройки в любом из параметров проекта или пакета, следует убедиться, что это сделано для всех пакетов и проекта.
В противном случае ваш проект будет иметь смешанную информацию отладки, что может привести к ухудшению процесса отладки.
Настройки могут быть применены к проекту или пакетам с использованием Additions and Overrides
Примечание: При компиляции 32-битных приложений (нативных или кросс) FPC по умолчанию имеет значение «Stabs» (по крайней мере, в некоторых ОС). Рекомендуется изменить вашу конфигурацию на «Dwarf».
Для 64-битных приложений FPC поддерживает только «Dwarf». (Старые FPC также поддерживают «Stabs», но это не рекомендуется)
Stabs (только GDB) |
-g или -gs Вы должны использовать только если ваша версия GDB не поддерживает [режим] dwarf. Вам может понадобиться это [в случае использования] «var param» (param by ref): procedure foo(var a: integer); Отладчик на основе LLDB не поддерживает [режим] Stabs |
Dwarf (GDB и LLDB) |
Dwarf 2 (-gw)Это устанавливает формат в Dwarf2. Это самая основная настройка dwarf. Dwarf 2 с наборами (-gw -godwarfsets)Этот параметр добавляет возможность проверки наборов: «type TFoo=set of (a,b,c);». Dwarf 3 (-gw3)Dwarf 3 может кодировать дополнительную информацию для некоторых типов (таких как строки и массивы). Это также сохраняет регистр идентификаторов в отладочной информации. Однако все еще есть проблемы с произведенной отладочной информацией. Некоторая информация может быть неправильно закодирована, а другая не понята GDB. В некоторых случаях это может привести к падению gdb. |
Различия |
Этот список никоим образом не полон:
|
Проверка типов данных (Watch/Hint)
Строки |
GDB не знает тип данных строк Паскаля. Информация о типе, которую возвращает GDB, в настоящее время не позволяет IDE различать PChar (индекс равен 0) и строку (индекс равен 1). В результате «mystring[10]» может быть 10-ым символом в строке или 11-м в PChar Поскольку среда IDE не может быть уверена, какая из них применима, она покажет оба варианта. 2 результата будут иметь префикс String/PChar. |
Свойства |
В настоящее время отладчик не поддерживает выполнение каких-либо методов. Поэтому могут быть проверены только те свойства, которые относятся непосредственно к переменной. (Это работает только при использовании dwarf). TFoo = Class private FBar: Integer; function GetValue: Integer; public property Bar: Integer read FBar; // Может быть проверено (если используется Dwarf) property Value: Integer read GetValue; // *Не* может быть проверен end; |
Вложенные процедуры / функции |
procedure SomeObject.Outer(NumText: string); var OuterVarInScope: Integer; procedure Nested; var I: Integer; begin WriteLn(OuterVarInScope); end; var OuterVarOutsideScope: Integer; begin Nested; end; Если вы входите в «Nested», то IDE позволяет вам проверять переменные из обоих стековых фреймов. Это вы можете проверить: I, OuterVarInScope, NumText (без необходимости изменять текущий фрейм стека, в окне стека) Однако есть несколько оговорок: Вы также можете проверить: OuterVarOutsideScope. Это против правил определения границ Паскаля. Вы не можете оценить операторы по 2 фреймам: «OuterVarnScope-I» не работает. Предупреждение: Вы можете увидеть неправильное значение. Если в любом другом модуле есть глобальная (или иным образом видимая для правил области действия GDB) переменная с тем же именем, что и локальная переменная из внешнего фрейма, будет показана эта глобальная переменная. Там нет никакого предупреждения для этого. |
Массивы |
показывает как символы, а не int. Только GDB 7.2 или выше, кажется, справиться с этим правильно. Кроме того, могут возникнуть проблемы при использовании массивов (неназванных) записей. Динамические массивы будут показывать только ограниченный объем своих данных. Начиная с Lazarus 1.1, предел может быть указан. |
Если значения Watches/Hint отображаются некорректно, отключите REGVARS. Установите -OoNOREGVAR в «Параметрах пользователя».
Указание GDB вида сборки
GDB позволяет указать вид сборки (стиль Intel или AT&T), который будет использоваться при отображении кода сборки. Если кто-то хочет перейти на конкретный вариант, это можно изменить в свойстве AssemblerStyle в параметрах отладчика Lazarus для GDB (функция доступна в Lazarus 2.0). Альтернативно (и единственный способ добиться этого внутри Lazarus в более старых версиях до Lazarus 2.0) можно указать эту опцию, передав команду set disassembly-flavor в Debugger_Startup_options. Можно использовать несколько вариантов синтаксиса (в зависимости от версии GDB), некоторые из которых показаны ниже:
-ex "set disassembly-flavor intel" --eval-command="set disassembly-flavor intel" -eval-command="set disassembly-flavor intel" --eval-command "set disassembly-flavor intel"
Обратите внимание, что может потребоваться сбросить отладчик (Run | Reset Debugger) перед загрузкой GDB с новой настройкой.
Windows
Консольный вывод для GUI-приложений
В Windows в среде IDE нет окна «Отладчик — вывод на консоль». Это потому, что консольные приложения открывают свое собственное окно консоли. Приложения с графическим интерфейсом по умолчанию не имеют консоли. Чтобы иметь консоль для приложения с графическим интерфейсом, необходимо изменить настройки компилятора (Project options(Параметры проекта) / Compiler Options(Параметры компилятора) / Config and Target(Настройка и целевая платформа) / Win32 Gui Application(Графическое приложение Win32): -WC / -WG)
Отладка приложений с правами Администратора
В Windows Vista+ в разделе Project Options(Параметры проекта) при установке разрешений в файле манифеста для программы «от имени Администратора» программа будет запускаться с правами администратора. Если ваша IDE запущена не от имени Администратора, отладка будет запускаться нормально, программа будет отображаться в списке задач, но ее графический интерфейс не будет отображаться.
Поэтому имейте в виду, что вы должны сопоставить уровень привилегий между IDE (и gdb) и приложением, которое необходимо отладить.
Win 64 bit
- Требуется Lazarus 1.0+ (с FPC 2.6+)
- Рекомендуется использовать dwarf
Использование 32-битного Lazarus на 64-битной Windows
В качестве альтернативы можно отлаживать приложения как 32-разрядные приложения (используя 32-разрядную версию GDB). После успешной отладки:
- приложение может быть кросс-скомпилировано до 64 бит или
- можно использовать 2-ую установку Lazarus (используя другую конфигурационную опцию —primary-config-path из 32-битной Lazarus)
При установке 32-битного Lazarus убедитесь, что вы изменили конфигурацию, чтобы использовались правильные 32-битные FPC и GDB.
Больше проблем и решений Win 64 bit
См. также http://forum.lazarus.freepascal.org/index.php/topic,13188.0/topicseen.html
Win CE
Отладчик не находит никаких исходных файлов
Меню: «Tools»(Сервис)
Страница: «Debugger»/»Generic» (Отладчик/Общее)
Поле: «Additional search path» (Дополнительный путь поиска)
Введите в это поле букву вашего каталога проекта.
Linux
Известные проблемы
- При использовании старой версии GDB могут возникнуть проблемы, по крайней мере, на некоторых процессорах (например, SPARC, с GDB 6.4, поставляемой Debian «Etch»). В частности, фоновые потоки могут блокироваться, даже если программа работает нормально автономно.
- Если ваша программа блокируется при запуске, перейдите в Tools(Сервис) / Options(Настройки) / Debugger(Отладчик) / General(Общее) и установите DisableLoadSymbolsForLibraries=True
macOS
Под macOS вы обычно устанавливаете GDB с инструментами разработчика Apple. Версия GDB, доступная на момент написания, — 6.3.50.
Этот раздел — первый подход к сбору информации об известных проблемах и обходных путях. Информация, представленная здесь, во многом зависит от отзывов пользователей macOS.
Начиная с Lazarus 2.0, в среде IDE имеется отладчик на основе LLDB. Отладчик на основе GDB также может использоваться, но требует много работы по сборке и подписи кода GDB.
Известные проблемы (GDB)
Отладка 32-битного приложения на 64-битной архитектуре
IЭто возможно, а иногда и необходимо отладить 32-битный exe-файл в 64-битной системе.
Это возможно только с Lazarus 0.9.29 rev 28640 и выше.
TimeOuts (только 64 бит)
Похоже, что некоторые команды некорректно (или не полностью) обрабатываются GDB 6.3.50. Обычно GDB заканчивает каждую команду запросом «<gdb>» для следующей команды. Но версия, предоставляемая Apple, иногда не может этого сделать.
В этом случае IDE придется использовать тайм-аут, чтобы избежать бесконечного ожидания.
Это было замечено с:
- Определенными выражениями Watch (по крайней мере, если наблюдаемая переменная не была доступна в текущей выбранной функции)
- Обработкой исключений
- Вставленными точками останова (окончание последнего модуля / отсутствие кода)
Это не может быть гарантировано:
- что GDB не будет позже возвращать некоторые результаты от такой команды
- что внутреннее состояние GDB все еще действительно
Приглашение, отображаемое для тайм-аутов, может быть отключено в конфигурации отладчика:
- Warn On Timeout
- True/False. Автопродолжение, после тайм-аута не показывается предупреждение.
- TimeOutForEval
- Задайте [интервал] в миллисекундах, как долго не срабатывает обнаружение тайм-аута (само обнаружение может занять некоторое время).
Возможно, вам придется «СБРОСИТЬ» отладчик после внесения этих изменений.
Больше информации смотрите здесь:
- http://bugs.freepascal.org/view.php?id=19262#c47944
- http://bugs.freepascal.org/view.php?id=21653
Альтернативное решение, похоже, заключается в использовании более новой версии GDB (см. ниже).
Hardware exceptions under macOS
When 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.
The 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.
Использование альтернативных отладчиков (GDB)
Вы можете установить GDB 7.1 (или более позднюю версию), используя MacPorts, fink или homebrew.
Было замечено следующее:
- GDB 7.1, похоже, имеет проблемы с отладочной информацией [режима] stabs из fpc.
- Убедитесь, что вы выбрали «generate dwarf debug information (-gw)»(генерировать отладочную информацию dwarf (-gw)) на прилагаемой вкладке project options(параметры проекта)
- Следите за предупреждениями компоновщика «unknown stabs»
- Если у вас все еще есть проблемы, убедитесь, что никакой код вообще не скомпилирован [в режиме] stabs. Ваш LCL может содержать [код, скомпилированный в режиме] stabs, и это закончится в вашем приложении, даже если вы скомпилируете приложение с -gw. Поэтому вам, возможно, придется перекомпилировать LCL с помощью -gw (или без какой-либо отладочной информации). То же самое для любого другого модуля, пакета, RTL, …., которые могут иметь [код, скомпилированный в режиме] stabs.
Даже при соблюдении этих правил GDB не всегда работает с приложениями, скомпилированными в fpc.
Эти наблюдения могут быть неполными или неправильными, пожалуйста, обновите их, если у вас есть дополнительная информация.
- Lazarus версии от 1.0 до 1.0.12
В настройках отладчика сконфигурируйте
EncodeCurrentDirPath = gdfeNone EncodeExeFilename = gdfeNone
И вы должны использовать «run param», чтобы указать фактический исполняемый файл внутри пакета приложения (project.app/Content/MacOS/project или аналогичный)
В Lazarus версии от 1.0.14 до 1.2 и выше эти шаги больше не требуются.
Xcode 5
Начиная с Mavericks 10.9, Xcode 5 больше не устанавливает GDB по умолчанию и не [делает его] глобальным.
- Для 10.9 вы можете установить старый Xcode 4 параллельно. Это не поддерживается Apple, поэтому он может порвать с одной из следующих версий.
- Вы можете скомпилировать и установить GDB. См. GDB on OS X Mavericks and Xcode 5.
См., пожалуйста, issue 25157 on mantis
- http://forum.lazarus.freepascal.org/index.php/topic,22529.0.html — об установке Xcode 4.3
- http://forum.lazarus.freepascal.org/index.php/topic,22328.0.html — установка gdb
Тема «[Lazarus] Help: Проблемы macOS» на
- http://lists.lazarus.freepascal.org/pipermail/lazarus/2013-November/thread.html#84126
- http://lists.lazarus.freepascal.org/pipermail/lazarus/2013-October/thread.html#84095
Замороженный UI с GDB
Чтобы запустить программу из оболочки, вам нужно запустить «open <program1>.app», прямой доступ к ./program1 не даст вам доступа к пользовательскому интерфейсу. Чтобы заставить GDB работать изнутри вашей IDE, вы должны указать этот путь в качестве параметра run. Выберите в меню Run > Run parameter и введите полный путь к хост-приложению. Например, /User/<yourid>/sources/myproject/project1.app/Content/MacOS/project1
Ссылки
- macOS поставляется с множеством полезных инструментов для отладки и профилирования. Просто запустите /Developer/Applications/Instruments.app и попробуйте их.
FreeBSD
GDB, предоставляемый системой, является древним (версия 6.1.1 во FreeBSD 9) и не очень хорошо работает с Lazarus.
Вы можете установить более новый GDB из дерева портов, например,
cd /usr/ports/devel/gdb
make -DBATCH install clean
Новый GDB находится в /usr/local/bin/gdb
Использование переведенного GDB (неанглийские сообщения от GDB)
- Это относится только к Lazarus *до* 1.2 или *до* 1.0.14.
В этом больше нет необходимости.
IDE ожидает ответов на английском языке. Если GDB переведен, это может повлиять на то, насколько хорошо IDE может его использовать.
Во многих случаях это все еще будет работать, но с ограничениями, такими как:
- Нет сообщений или класса для исключений
- Нет живого обновления потоков, пока приложение работает
- Сообщение об ошибке отладчика после остановки приложения (в конце отладки)
- другое …
Пожалуйста, прочитайте всю ветку:
[http://forum.lazarus.freepascal.org/index.php/topic,20756.msg120720]
Попробуйте запустить lazarus с
export LANG=en_US.UTF-8 lazarus
Известные проблемы/ошибки, о которых сообщает IDE
Сообщения | OС | Описание | |
---|---|---|---|
During startup program exited normally |
|||
Все |
В редких случаях в среде IDE появляется сообщение «During startup program exited normally»(Во время запуска программа завершается нормально). Эта ошибка может произойти по разным причинам. Есть как минимум 2 известных:
Причин может быть еще больше. Второе происходит только при повторных запусках отладчика. IDE пытается обойти это, но это не всегда удается. Вполне вероятно, что в тех случаях, когда в данный момент происходит сбой, это необходимо обойти с помощью пользовательского набора настроек (см. ниже). Даже если вы можете обойти это, рассмотрите возможность отправки файла журнала: логирование информации для сеанса отладки Способы обхода: (все на странице options / debugger)
Это можно использовать, только если вы не отлаживаете библиотеки (если вы не написали свою собственную библиотеку)
Это добавляет очень небольшое увеличение времени, необходимого для запуска отладчика, так как GDB должен каждый раз перезагружаться.
Попробуйте любое из значений, доступных для «InternalStartBreak» (в сетке свойств параметров) |
||
SIGFPE |
|||
Все |
SIGFPE является исключением операций с плавающей точкой. Источник: [forum thread] Исключения SIGFPE возникают в следующей инструкции FPU; поэтому строка ошибки, которую вы получаете от Lazarus, может быть отключена/неверна. Delphi, а, следовательно, и Freepascal, имеют нестандартную FPEMask. Многие библиотеки C не используют исключения для проверки проблем FPU, но проверяют состояние FPU. Обходной путь: попробуйте изменить маску с помощью SetExceptionMask как можно раньше в вашей программе: uses math; ... SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]) Если вы считаете, что в коде FPC что-то не так, вы можете использовать директиву $ SAFEFPUEXCEPTIONS. Это добавит FWAIT после каждого сохранения значения FPU в памяти. Большинство операций FPC с плавающей запятой и двойных операций заканчиваются сохранением результата где-то в памяти, поэтому в результате отладчик останавливается на правильной строке FPC. FWAIT — недопустимая задача для FPU, но она вызовет немедленное возникновение исключения, а не где-то дальше по вашему коду. Это не делается по умолчанию, потому что это сильно замедляет операции с плавающей запятой. |
||
Error 193 (Error creating process / Exe not found) |
|||
Windows |
Подробнее см. здесь. Эта проблема наблюдалась в Win XP и, по-видимому, вызвана самой Windows. Проблема возникает, если путь к вашему приложению имеет пробел, и существует второй путь/файл, имя которого совпадает с частью пути перед пробелом, например:
|
||
SigSegV — даже с новым пустым приложением |
|||
Windows |
Нижеследующее применимо только [в том случае], если вы получаете SigSegv даже с новым пустым приложением (пустая форма и никаких изменений, внесенных в unit1). Иногда SigSegV может быть вызван несовместимостью между GDB и некоторыми другими продуктами. Не известно, является ли это проблемой GDB или вызвано другим продуктом. Нет никаких признаков того, что какой-либо из перечисленных продуктов каким-либо образом виноват. Предоставленная информация может относиться только к некоторым версиям названных продуктов:
|
||
SigSegV — и продолжить отладку |
|||
Windows, Mac |
Bug 10004 — gdb cannot continue after SIGFPE or SIGSEGV happen on windows Workaround for SIGFPE bug in GDB for Windows? |
||
На Windows Open/Save/File или System Dialog вызывает сбой GDBСм. следующую запись перестал работать gdb.exe Или загрузите «alternative GDB»(альтернативный GDB) 7.7.1 (Win32) с сайта Lazarus SourceForge. «Step over» шаги внутри функции (Win 64) |
|||
Windows 64 |
Иногда нажатие клавиши F8 не переходит [мимо] функции, а входит в нее. Можно продолжить с F8, и иногда GDB возвращается в вызывающую функцию после 1-го или 2-ого дальнейших шагов (переступая через оставшуюся часть функции). В Lazarus 2.0 обходной путь был добавлен, но его необходимо включить. Перейдите в Tools(Сервис) > Options(Настройки) > Debugger(Отладчик) и включите (в сетке свойств) «FixIncorrectStepOver». |
||
Перестал работать gdb.exe |
|||
Windows |
Поврежден сам GDB. Это будет связано с ошибкой в GDB и может быть невозможно исправить в Lazarus. Тем не менее, возможно, стоит отправить информацию (см. Раздел «Сообщения об ошибках» ниже). Возможно, Лазарус может избежать вызова неисправной функции. Есть одна уже известная ситуация. GDB (от 6,6 до 7,4 (последний на момент тестирования)) может аварийно завершить работу во время запуска вашего приложения или сразу после его остановки. Это происходит во время загрузки библиотек (DLL) для вашего приложения (смотрите окно «Debug output»).
Это можно использовать, только если вы не отлаживаете в библиотеках (если вы не написали свою собственную библиотеку) |
||
internal-error: clear_dangling_display_expressions |
|||
Windows, может быть другая ОС |
В конце сеанса отладки отладчик сообщает: internal-error: clear_dangling_display_expressions: Assertion `objfile->pspace == solib->pspace' failed. Это ошибка в GDB, и иногда решается так:
--eval-command="set auto-solib-add off"
Это можно использовать, только если вы не отлаживаете библиотеку (если вы не пишете свою собственную библиотеку) |
||
«PC register is not available» («SuspendThread failed. (winerr 5)») |
|||
Windows |
GDB может упасть с этим сообщением. Это связано с Bug 14018. |
||
Can not insert breakpoint (Не могу вставить точку останова) |
|||
Все |
Для точек останова с отрицательными числами: Вы также можете попробовать:
Это можно использовать, только если вы не отлаживаете библиотеку (если вы не пишете свою собственную библиотеку) Для точек останова с положительными числами В Windows, если это происходит несмотря на правильную настройку, добавьте -Xe (внешний компоновщик) к пользовательским параметрам. |
Сообщения об ошибках
- Вы проверили свои настройки отладчика?
- Вы пробовали [переключать в режим] Dwarf и Stabs
Проверьте существующие отчеты
Пожалуйста, проверьте каждую из следующих ссылок
- Search Mantis for category «debugger»
- Search Mantis for text «debugger»
- Search Mantis for text «gdb»
- Search Mantis for text «dwarf»
- Search Mantis for text «stabs»
Баги в GDB
Описание | ОС | GDB Version(s) | Ссылка |
---|---|---|---|
Падение на win64 с неправильными символами dwarf2 | win64 | GDB 7.4 (может быть и выше) | http://sourceware.org/bugzilla/show_bug.cgi?id=14014 |
Отладчик не видит переменные окружения, установленные в переменной окружения | win | Решено в GDB 7.4 | http://sourceware.org/bugzilla/show_bug.cgi?id=10989 |
Win32 падает с ошибкой «winerr 5» (реестр ПК недоступен) *очевидно* не проявляется от 7.0 до 7.2 |
win | GDB 7.3 и выше (может быть также в 6.x) Кажется, должно быть исправлено в 7.7.1 |
http://sourceware.org/bugzilla/show_bug.cgi?id=14018 |
Неверный индекс массива с dwarf | * | GDB от 7.3 до 7.5 (может быть в 7.6.0) исправлено в 7.6.1 |
http://sourceware.org/bugzilla/show_bug.cgi?id=15102 |
GDB падает, если пытается проверить или просмотреть строки ресурсов протестировано только на win32, не известно только для других платформ, если используется dwarf |
* | GDB от 7.0 до 7.2.xx | |
Записи (особенно: указатель на запись) могут быть ошибочно приняты за classes/objects Данные/значения отображаются корректно / ожидаются дальнейшие тесты Это также влияет на способность проверять короткие строки shortstring |
* | GDB 7.6.1 и выше (проверено и не работает до GDB 8.1) | https://sourceware.org/bugzilla/show_bug.cgi?id=16016 |
Объектные переменные (члены) методов текущего класса (self.xxx) не могут быть отслежены/проверены Чтобы обойти, используйте верхний регистр или префикс в виде self. |
* | GDB от 7.7 до 7.9.0 (включительно) Обходной путь присутствует в Lazarus 1.4 и выше |
https://sourceware.org/bugzilla/show_bug.cgi?id=17835 |
GDB не может продолжить работу после SIGFPE или SIGSEGV на Windows | win | * | https://sourceware.org/bugzilla/show_bug.cgi?id=10004 |
GDB усекает значения для «const x = qword(…)» | Win х64 может быть и другие |
Исправлено в GDB 7.7 и выше, возможно, исправлено даже между 7.3 и 7.7 |
Проблемы с GDB 7.5.9 или 7.6
Существуют различные сообщения (не подтвержденные) для разных платформ о сбоях в gdb 7.5.9 или 7.6.
Настоятельно рекомендуется не использовать эти версии.
- http://bugs.freepascal.org/view.php?id=24401
- http://forum.lazarus.freepascal.org/index.php/topic,20756.msg120842.html#msg120842
- http://sourceware.org/bugzilla/show_bug.cgi?id=15453
Create a new Report (GDB and LLDB)
Если вы когда-либо в прошлом обновляли, изменяли, переустанавливали свой Lazarus, тогда, пожалуйста, проверьте диалоговое окно «Options»(Параметры) («Environment»(Окружение) или меню «Tools»(Сервис)) для [проверки] версии используемых GDB и FPC. Они все еще могут указывать на старые настройки.
Основная информация
- Ваша операционная система и версия
- Ваш CPU (Intel, Power, …) х32 или х64
- Версия…
- Lazarus (последний стабильный релиз или ревизия SVN) (включите настройки, использующие перекомпиляцию LCL, пакетов или IDE (если используется пользовательская компиляция Lazarus))
- FPC, если отличается от значения по умолчанию. Пожалуйста, проверьте диалоговое окно «Options»(Настройки)(«Environment»(Окружение) или меню «Tools»(Сервис))
- GDB, пожалуйста, проверьте диалоговое окно «Options»(Настройки)(«Environment»(Окружение) или меню «Tools»(Сервис))
- Настройки компилятора: (меню: «Project»(Проект), «Project Options»(Настройки проекта), указать все настройки, которые вы использовали)
- Страница «Compilation and linking»(Компиляция и компоновка)
-
- фрейм «Optimization levels»(Уровни оптимизации) (-O???): Level (-O1 / …) Other (-OR -Ou -Os) (Пожалуйста, всегда тестируйте с отключенной оптимизацией, и -O1)
- фрейм «Linking»(Компоновка)
- Smart Link(Умная компоновка) (-XX); Должно быть отключено(снята галочка)
-
- Страница «Debugging»(Отладка)
-
- фрейм «Debugger Info»(Отладочная информация): (-g -gl -gw) (Пожалуйста, убедитесь, что используется как минимум -g или -gw)
- Strip Symbols from executable(Вырезать символы из исполняемого файла) (-Xs); Должно быть отключено (снята галочка)
- фрейм «Debugger Info»(Отладочная информация): (-g -gl -gw) (Пожалуйста, убедитесь, что используется как минимум -g или -gw)
Логирование информации для сеанса отладки
- Запустите Lazarus со следующими параметрами:
--debug-log=LOG_FILE --debug-enable=DBG_CMD_ECHO,DBG_STATE,DBG_DATA_MONITORS,DBGMI_QUEUE_DEBUG,DBGMI_TYPE_INFO,DBG_ERRORS
-
- На Windows
- вам нужно создать ярлык для Lazarus.exe (например, на рабочем столе) и отредактировать его свойства. Добавьте » —debug-log=C:laz.log —debug-enable=…» в командную строку.
- На Linux
- запустите Lazarus из оболочки и добавьте » —debug-log=/home/yourname/laz.log —debug-enable=…» в командную строку
- На macOS
- запустите Lazarus из оболочки /path/to/lazarus/lazarus.app/Contents/MacOS/lazarus —debug-log=/path/to/yourfiles/laz.log —debug-enable=…
Приложите файл журнала после воспроизведения ошибки.
Если вы не можете сгенерировать файл журнала, попробуйте открыть окно «Debug output»(Вывод отладки) (из меню «View»(Вид) -> «Ide Internals»(Внутреннее состояние IDE)). Вы должны открыть его перед запуском приложения (по F9). А затем запустите ваше приложение. После возникновения ошибки скопируйте, заархивируйте и прикрепите содержимое окна «Debug output»(Вывод отладки).
Тестовые запуски
Если вы используете другую версию GDB, вы можете запустить тестовый пример. Обратите внимание, что не все тесты имеют правильные ожидания для каждой возможной установки. Поэтому некоторые тесты могут не работать на некоторых системах.
Тест отладчика находится в каталоге:
- Lazarus 1.2.x: debuggertestGdbmi
- Lazarus 1.3 и выше: componentslazdebuggergdbmitest
В приведенном ниже пути используется v.1.3. Если используется 1.2.x, замените его соответствующим образом.
- Одноразовая настройка
Создайте каталог componentslazdebuggergdbmitestLogs:
Необязательно, но помогает хранить результат теста в одном месте
Создайте конфигурационные файлы:
В каталоге componentslazdebuggergdbmitest
- copy fpclist.txt.sample to fpclist.txt
- copy gdblist.txt.sample to gdblist.txt
откройте 2 текстовых файла и отредактируйте путь к fpc/gdb, а также отредактируйте версию (тест может запускать разные тесты для разных версий).
Можно указать более одного GDB/FPC
- Запуск теста
- Откройте проект: componentslazdebuggergdbmitestTestGdbmi.lpi
- Только для Lazarus 1.2.x: пересоберите IDE с опцией «Clean»(Очистить) (Меню «Tools»(Сервис) —> «Configure build Lazarus»(Параметры сборки Lazarus) —> снять галочку с «Restart after building IDE»(Перезапускать после сборки IDE)). Если это пропущено, компиляция проекта может завершиться неудачно. Если компиляция не удалась, ВСЕ *.ppu/*.o файлы в [папке] lazdebuggergdbmitest должны быть удалены вручную.
- Запустите проект (если тест не прошел, возможно, вам придется удалить файлы *.exe в componentslazdebuggergdbmitestTestApps)
Ссылки
Внешние ссылки
- Официальный сайт GDB
Экспериментальные отладчики в Паскале
Это работа в процессе:
- duby
- fpdebug от Graeme Geldenhuys
- vdbg
- fpdebug in Lazarus/components/fpdebug and debugger/components/fpgdbmidebugger
- blog
- FpGdbmiDebugger
- How to register debugger from package?
Связанные темы форума
- Issues (crash) with gdb 7.6.2 on arch linux
- About the LLDB based debugger
- Печать
Страницы: [1] Вниз
Тема: Lazarus не работает пошаговый отладчик (Прочитано 5128 раз)
0 Пользователей и 1 Гость просматривают эту тему.
vanili
Доброго всем времени суток.
Недавно переустановил Lazarus (0.9.26.2-2 beta) и вчера «вдруг» обнаружилось, что не работает пошаговая отладка (плюс к тому же и брэйкпонты). В настройках отладчика стоит gdb, по указанному там адресу он есть. Вывод командной строки в случае запуска пошаговой отладки под спойлером.
Нашёл на англоязычном форуме подобную проблему (вот только там для Windows, а у меня, естесссно, Ubuntu 9.04), там предлагалось решить выбором пункта debug info. Я такого пункта в опциях не нашёл.
Вот и спрашивается — что делать? Заранее спасибо.
« Последнее редактирование: 03 Октября 2010, 12:48:18 от vanili »
Alexx2000
В настройках отладчика стоит gdm, по указанному там адресу он есть.
Полагаю, что все таки имется ввиду gdb, т.к. gdm это GNOME Display Manager.
Нашёл на англоязычном форуме подобную проблему (вот только там для Windows, а у меня, естесссно, Ubuntu 9.04), там предлагалось решить выбором пункта debug info. Я такого пункта в опциях не нашёл.
Вот и спрашивается — что делать? Заранее спасибо.
Посмотрите в настройках «Параметры компилятора»->»Связывание», необходимо чтобы стояли галочки «Генерировать отладочную информацию для GDB» и «Выдавать номера строк в ошибках времени исполнения»
vanili
Да, gdb, уже исправил.
Изменил настройки компилятора — помогло. Спасибо большое за помощь.
Frankenstein2017
Спасибо большое за помощь.
Поддерживаю. Спасибо, тоже помогло.
У б у н т а р и и в с е х с т р а н , о б ъ е д и н я й т е с ь !
- Печать
Страницы: [1] Вверх
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Буквально на днях разработчики Lazarus сообщили о том, что мы все-таки доживем до момента, когда версия Lazarus 1.0 выйдет в свет. Судя по всему – это событие состоится через месяц-полтора. А пока, в доступе есть версии 0.9.28 — 0.9.29. И, думаю, что практически каждый, кто впервые сталкивался с IDE Lazarus и устанавливал его, например, под Windows так же сталкивался хоть и с мелкими, но достаточно неприятными моментами в работе, например, отладчик с чего-то начинал “портачить” и проскакивать мимо точек останова или Lazarus с чего-то при пересборке переставал находить исходники с FPC. В принципе большинство из таких проблем решаются достаточно быстро, но все-таки подведем небольшой итог по решению микро-проблем в Lazarus 0.9.xx.
И самая первая проблема с которой я столкнулся была под Windows. Проблема заключалась как раз в работе отладчика – точнее в отсутствии работы как таковой. Отладчик просто никак не реагировал на мои просьбы и мольбы о помощи. Решений может быть несколько:
1. Проверить настройки компилятора FPC, которые представлены на рисунке:
2. Проверить путь к отладчику. Маловероятно, но может быть проблема в этом:
3. Найти более свежую версию gdb.exe. Сам этим советом не пользовался, т.к. моя проблема решилась по п.1., но встречал высказывания на форумах, что такое действие может помочь.
Следующая проблема – Lazarus не видит исходный код FPC и в результате этого ругается по чём зря. Например, мне Lazarus выдавал ошибку о том, что модуль Dialogs.pas не найден, у других – ругался на другие модули. Обычно такая проблема может возникнуть в случае, если Вы обновляли IDE и при этом обновляли не правильно, например, не удалили предыдущую версию. В этом случае достаточно зайти в настройки Lazarus’a и указать правильные пути к fpc.exe, make.exe и директории source с исходниками той версии Free Pascal которая Вам необходима. Например, на рисунке ниже показаны настройки Lazarus для работы с FPC 2.4.3:
Логическим продолжением той проблемы может быть следующая – пути в настройках указаны верно, но Lazarus всё равно упорно продолжает ругаться на то, что не может найти какие-либо модули.
Шагом для решения этой проблемы может быть следующее действие: заходите в директорию:
[path_to_lazarus]fpcx.x.xbini386-win32
Это в том случае, если вы используете FPC, поставляемый вместе с Лазарем для Windows, открываете файл fpc.cfg и внимательнейшим образом просматриваете все пути к файлам. Они обязательно должны соответсвовать той версии Free Pascal, которую вы используете. Если же Вам лень копаться в файле, можно сделать по другому – удаляете и выполняете в командной строке следующую команду:
fpcmkcfg.exe -d basepath=C:lazarusfpcx.x.xbini386-win32 -o fpc.cfg
То есть создаете новый файл конфигурации для FPC. Утилита fpcmkcfg.exe находится в той же директории bin, что и файл конфигурации.
В 99% случаев, если правильно выставлены настройки IDE и сформирован верный fpc.cfg проблема решается и Lazarus, работает шустро и всё просто супер, НО остается 1% случаев, когда и такие действия не помогают(!).
Проблема может сохраниться в том случае, если Вы используете версию Lazarus 0.9.29. С такой ситуацией я столкнулся сегодня, когда решил обновить своего Лазаря. Причём ситуация довольно интересная: пустое приложение компилируется, exe-шник запускается, компоненты на форму укладываются, но как только пробуешь создать какое-нибудь событие у любого компонента Lazarus ругается на отсутствие модуля. При этом обычно указывает на последний либо предпоследний модуль в списке uses.
Оказывается решение проблемы опять же кроется в путях, а именно – в их написании. Вот так выглядит путь к исходникам, выставленный по умолчанию при установке Лазаруса:
Вроде бы всё верно, а ошибка есть. Теперь попробуйте изменить букву диска с “с” на “С” и сохранить настройки – ничего не выйдет и ошибка так и останется :). Не знаю почему и с чем это связано, но именно из-за этой вот маленькой буковки и возникает непонятная проблема с поиском исходников.
Чтобы изменить написание пути идем (в Windows XP) в директорию:
C:Documents and Settings[User_name]Local SettingsApplication Datalazarus
открываем в обычном блокноте файл environmentoptions.xml ищем в нем “неправильный” путь к source и изменяем первый первый символ. Мне после такого “наглого” вмешательства в настройки IDE даже не пришлось ничего перезапускать – все заработало как швейцарские часы.
Вот пожалуй те мелкие, но довольно неприятные недочёты в Lazarus, которые портят нервы новым пользователям. Естественно такие проблемы обнаруживаются максимально быстро и так же быстро решаются. Так что будем надеяться, что версия Lazarus 1.0. будет избавлена от них и будет работать намного лучше и быстрее. Ксти, может и компилятор обновят до 2.5., но это только мои предположения и ничего более.
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Open
Issue created Jan 17, 2012 by FPC Admin account@fpc_adminOwner
Lazarus debugger fails to work with PIE binaries
Original Reporter info from Mantis: norayr
-
Reporter name: Norayr Chilingarian
Description:
In the beginning, Lazarus ide calls gdb with an «info address main» command and sets a breakpoint with an address, not the name.
—
(gdb)
&LtPos;info address main>
&»info address mainn»
~»Symbol «main» is a function at address 0x724.n»
^done
(gdb)
<-break-insert -t *1828>
—
Later, when PIE elf is loaded that address changes and that’s why debugging fails.
—
(gdb)
=library-loaded,id=»/lib64/ld-linux-x86-64.so.2″,target-name=»/lib64/ld-linux-x86-64.so.2″,host-name=»/lib64/ld-linux-x86-64.so.2″,symbols-loaded=»0″,thread-group=»i1″
^error,msg=»Warning:nCannot insert breakpoint 1.nError accessing memory address 0x724: Input/output error.n»
(gdb)
—
It seems that the beginning of the SetTempMainBreak function of the GDBMIDebugger may be removed:
---
// Try to retrieve the address of main. Setting a break on main is past initialization
if ExecuteCommand('info address main', R)
and (R.State <> dsError)
then begin
S := GetPart(['at address ', ' at '], ['.', ' '], R.Values);
if S <> ''
then begin
FTheDebugger.FMainAddr := StrToQWordDef(S, 0);
ExecuteCommand('-break-insert -t *%u', [FTheDebugger.FMainAddr], R);
Result := R.State <> dsError;
if Result then Exit;
end;
end;
---
Because later it calls
ExecuteCommand(‘-break-insert -t main’, R);
which works with PIE elf files ok.
FTheDebugger.FMainAddr seem to not be used, so that change may be the right solution.
Steps to reproduce:
debug a pie executable.
Additional information:
we found out this by debugging apache module which is pie because apache is pie in rhel6
Mantis conversion info:
- Mantis ID: 21106
- OS: GNU/Linux
- OS Build: RHEL6
- Platform: x86_64
- Version: 0.9.31 (SVN)
- Fixed in version: 0.9.31 (SVN)
- Fixed in revision: 34811 (#fbb30771)
- Monitored by: » norayr (Norayr Chilingarian)
- Target version: 0.99.0
- LazTarget: 1.0