Странная ошибка GTK2 RunError(216)

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

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

Странная ошибка GTK2 RunError(216)

Сообщение dunin » 25.10.2010 10:32:07

Странная ошибка. Возникает только под GTK2. Может возникнуть при таскании мышкой столбцов RxDBGrid-a, при нажатии любой клавиши в модальной форме, еще где-то (на могу отловить)...

Отладчик останавливается на строке в файле gtk2widgetset.inc
Код: Выделить всё
{------------------------------------------------------------------------------
  Method: TGtk2WidgetSet.AppWaitMessage
  Params:  None
  Returns: Nothing

  Passes execution control to the GTK engine till something happens
------------------------------------------------------------------------------}
procedure TGtk2WidgetSet.AppWaitMessage;
begin
  WaitingForMessages:=true;
  gtk_main_iteration_do(True); // <= ЗДЕСЬ !!!!!!!
  WaitingForMessages:=false;
end;


В виндусе, понятное дело, все нормально.

Кто-нибудь с подобным сталкивался?
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Странная ошибка GTK2 RunError(216)

Сообщение dunin » 26.10.2010 20:40:10

То ли GTK2 не допилен, то ли руки кривые...

Собрал проект под QT - все работает нормально. Вылетов нет. Для статистики: ошибка возникала только если перед этим динамически слинковать библиотеку, опять же откомпилированную в Лазарусе.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Странная ошибка GTK2 RunError(216)

Сообщение Padre_Mortius » 26.10.2010 20:51:14

А тест можно увидеть? На какой версии fpc это происходило?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Странная ошибка GTK2 RunError(216)

Сообщение dunin » 26.10.2010 20:54:40

Padre_Mortius писал(а):А тест можно увидеть? На какой версии fpc это происходило?

fpc 2.4.0-37.2

Проект большой. Если сам не разберусь - попробую вырезать кусок.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Странная ошибка GTK2 RunError(216)

Сообщение dunin » 28.10.2010 00:24:55

dunin писал(а):Проект большой. Если сам не разберусь - попробую вырезать кусок.

Не разобрался :(

Тест во вложении:
GTK2vylet.7z


Заранее спасибо. :|

Добавлено спустя 17 минут 13 секунд:
Да, вылета не будет, если проект не найдет библиотеку. Ее надо заранее откомпилировать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Странная ошибка GTK2 RunError(216)

Сообщение Odyssey » 28.10.2010 00:53:33

FPC 2.4.0, GTK 2.16.6, вылет подтверждаю. В выхлопе бэктрейс без информации о строках (несмотря на включенные -g и -gl), и сообщение
GLib:ERROR:gmain.c:1963:g_main_dispatch: assertion failed: (current->dispatching_sources == &current_source_link)

Может тест сразу в багтрекер?

P.S.
При сборке с Qt 4.5.3 вылетает при нажатии на кнопку главной формы, до диалога дело даже не доходит.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Странная ошибка GTK2 RunError(216)

Сообщение dunin » 28.10.2010 01:19:00

Odyssey писал(а):FPC 2.4.0, GTK 2.16.6, вылет подтверждаю. В выхлопе бэктрейс без информации о строках (несмотря на включенные -g и -gl), и сообщение
GLib:ERROR:gmain.c:1963:g_main_dispatch: assertion failed: (current->dispatching_sources == &current_source_link)

Может тест сразу в багтрекер?
Спасибо за проверку.
Закиньте кто-нибудь в багтрэкер, если не затруднит. Ни разу туда не писал - не уверен, что сразу правильно все сделаю.

Odyssey писал(а):P.S.
При сборке с Qt 4.5.3 вылетает при нажатии на кнопку главной формы, до диалога дело даже не доходит.
Думается мне, что это что-то из другой оперы. У меня вылета нет. Наоборот все нормально работает.

Где версию Qt посмотреть? Yast вот такую картинку показывает:
111.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Странная ошибка GTK2 RunError(216)

Сообщение Odyssey » 28.10.2010 18:00:12

dunin писал(а):Закиньте кто-нибудь в багтрэкер, если не затруднит. Ни разу туда не писал - не уверен, что сразу правильно все сделаю.

Тут вопрос в том, для кого нужно это закидывание. Если закинул и забыл, для разработчиков, чтоб поковыряли когда руки дойдут -- то "кто-нибудь" вполне справится. А если решение нужно самому, нужно быть готовым к вопросам от разработчиков, патчам, предложениям изменить то или другое. Т.е. нужно быть готовым к диалогу, обратной связи. И вот тут кто-то другой вряд ли поможет, т.к. проект чужой.
dunin писал(а):Где версию Qt посмотреть? Yast вот такую картинку показывает:

Я смотрел в qtconfig-qt4.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Странная ошибка GTK2 RunError(216)

Сообщение dunin » 28.10.2010 20:46:24

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

Мама... :?
Ушел изучать "как писать в багтрекер лазаруса"...

Добавлено спустя 1 минуту 40 секунд:
Кстати, Odyssey, это реально найденный мною баг? Может все-таки что-то криво написано? Спрашиваю как единственного человека, скачавшего тестовый пример.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Странная ошибка GTK2 RunError(216)

Сообщение Odyssey » 28.10.2010 21:44:40

dunin писал(а):Кстати, Odyssey, это реально найденный мною баг? Может все-таки что-то криво написано? Спрашиваю как единственного человека, скачавшего тестовый пример.

Мда, посмотрел поближе. Зря я так рано посоветовал багтрекер, извиняюсь. Проблема тут:
Код: Выделить всё
library ihmgvolg;
...
uses
...
Forms, Interfaces; // application.messagebox

Судя по постам, которые удалось нагуглить навскидку по запросу "LCL DLL", например:
http://www.lazarus.freepascal.org/index ... pic=8118.0
http://www.freepascal.ru/forum/viewtopic.php?f=5&t=19
http://www.mail-archive.com/lazarus@mir ... 16496.html
использовать LCL из динамических библиотек - дело бесперспективное.
Если выкинуть из uses библиотеки Interfaces и Forms, всё вполне благополучно работает хоть под qt, хоть под gtk.
Поэтому я бы попробовал обойтись чем-нибудь из этого:
1) целочисленными кодами возврата, их обработкой в основном приложении и показом сообщений
2) строковыми статусами, получаемыми по началу/завершению операций (работающими по типу GetLastError)
3) в крайнем случае -- callback-ами, типа
Код: Выделить всё
TMessageBoxProc = procedure(AMessage: PChar);
procedure RegisterMessageBoxProc(AProc: TMessageBoxProc); stdcall;
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Странная ошибка GTK2 RunError(216)

Сообщение dunin » 28.10.2010 22:19:35

Дасс... Лазарус - тема интересная и обширная. Опять похоже на облом, как в свое к OLE технологией, после чего в библиотеки и вперся.
Odyssey писал(а):использовать LCL из динамических библиотек - дело бесперспективное.
Если выкинуть из uses библиотеки Interfaces и Forms, всё вполне благополучно работает хоть под qt, хоть под gtk....

Ну хрен его знает... Час назад опять штудировал собственноручно написанное - вроде все правильно... тем более, что под Виндусом, что под QT (у меня) все работает и не жужжит.

Спасибо. Думаю тут надо еще разбираться и разбираться. Ушел изучать тему.

Добавлено:
Подтверждаю - uses Interfaces и Forms в библиотеках не дружат к виджетами gtk2 и qt. Без указанних юнитов все, тьфу-тьфу работает.

Вообще-то склоняюсь к мнению, что это баг/недоработка. Надо бы какой-нибудь хинт/варнинг что-ли для кодера выводить. Вроде как "используй на свой страх и риск, но корректная работа не гарантируется". Или в FAQ что-ли здесь добавить.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 47

Рейтинг@Mail.ru
cron