Как отладить компонент. gdb игнорирует бряк.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Как отладить компонент. gdb игнорирует бряк.

Сообщение wofs »

Доброго дня.
Есть Lazarus и установленный сторонний компонент FPSSpreadsheet.
При чтении некоторых файлов вылетает неизвесткая ошибка. Судя по стеку вызовов проблема возникает при попытке выполнить процедуру:

Код: Выделить всё

procedure TsSpreadOOXMLReader.ReadCell(ANode: TDOMNode; AWorksheet: TsWorksheet); 

Но при попытке установить бряк на ее тело отладчик игнорирует ее.
Отсюда вопрос - возможно ли отладить стороннюю компоненту в отладчике?
Или единственный путь - добавить в процедуру свой код (например - запись лога), который будет локализовывать проблему и пересобрать компонент?

p.s. На днях пытался отловить ошибку в dbrgids.pas и обнаружил, что gdb тоже не может его отлаживать. Это особенность отладчика или я что-то делаю не так? В настройках компиляции "Без оптимизации", отладочная информация генерируется и отладочные символы не вырезаются из файла.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>Отсюда вопрос - возможно ли отладить стороннюю компоненту в отладчике?
у меня проблем никогда не возникало.
Лазарус видит исходники компонента? т.е. если там умышленно сделать ошибку проект не соберется с руганью на нее?
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

zub писал(а):Лазарус видит исходники компонента? т.е. если там умышленно сделать ошибку проект не соберется с руганью на нее?

Да, и в стеке вызовов видно какие функции из компоненты вызывались перед исключением.
В самом приложении отладчик тоже работает без проблем.
А вот бряки в исходниках компоненты игнорирует. Lazarus транковый, 1.8.0rc5.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

а если по ф7 построчно пойти зайдет внутрь компонентных исходников?
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Транковый Lazarus это 1.9, но имхо дело не в Лазаре.
Чтобы бряки работали нужно скомпилировать пакет компонента с отладочной информацией.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>Чтобы бряки работали нужно скомпилировать пакет компонента с отладочной информацией.
нет. в "нормальном режиме" (когда лазарь видит исходники пакета, а не только ppu) он компилируется вместе с проектом каждый раз. исключение - пакеты входящие непосредственно в состав компилятора - они компилируются в момент сборки компилятора.

Если лазарь видит исходники пакета (работает навигация по исходникам?), то предположу что ТС чета глючит - точки останова не работают потомучто туда не ппередается управление.

>>Но при попытке установить бряк на ее тело отладчик игнорирует ее.
как это проявляется они красненькие с галочкой но останова не происходит? или зелененькие с крестиком?
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

zub писал(а):а если по ф7 построчно пойти зайдет внутрь компонентных исходников?

Нет, что меня очень удивило.
iskander писал(а):Транковый Lazarus это 1.9, но имхо дело не в Лазаре.

Извиняюсь, не достаточно осведомлен.
zub писал(а):как это проявляется они красненькие с галочкой но останова не происходит? или зелененькие с крестиком?

Да, с галочкой.
Скриншот 29-10-2017 203453.png

Скриншот 29-10-2017 203526.png


А это настройки компиляции:
Скриншот 29-10-2017 204026.png


Уровни оптимизации - 0 (без оптимизации).

Добавлено спустя 23 секунды:
И не влезший скрин-шот.

Добавлено спустя 4 минуты 3 секунды:
Притом, ReadFromFile отрабатывает верно и все работает. Но меня интересуют причины, по которым я не могу отлаживать инструкции компонентов. Так как wp с freepascal.org очень любезный человек, но ему быстро надоест разбираться с кривыми файлами, что я хочу загрузить его компонентой :D
У вас нет необходимых прав для просмотра вложений в этом сообщении.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

wofs писал(а): Но меня интересуют причины, по которым я не могу отлаживать инструкции компонентов.

Сам компонент должен иметь "Генерировать отладочную информацию для GDB" при компиляции.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

я бы сменил -gw2 на -g, по крайней мере на время разборок.

wofs
ты так будешь до заговения разбираться. Где инициатива? например пустой проект с какимнить стандартным лазарусным пакетом как себя ведет?
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

zub писал(а):ты так будешь до заговения разбираться. Где инициатива? например пустой проект с какимнить стандартным лазарусным пакетом как себя ведет?

Сделаю, все сделаю. Завтра еще раз пройдусь по опциям и если не найду проблемы - создам чистый проект и попробую отладить тот же StringGrid. О результатах отпишусь.
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

В итоге понадобилось скомпилировать под x64 - поставил Lazarus x64 и обнаружил, что там работает все отлично.
Настроил кросс компиляцию из x64 в x32 и снес Lazarus x32.
Хэппи енд. Всем спасибо за участие.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

странный хэпиэнд. у меня всё прекрасно работает в 32 разрядном лазаре
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

zub, возможно, временный глюк, исправленный в более новой версии, или рассинхронизация лазаря и компилятора.

У меня, кстати, тоже все работает с отладкой в 32битной версии.
Ответить