Название: Странный вылет на connect'е [Qt 5.9] Отправлено: Crazy Sage от Сентябрь 15, 2017, 06:59 Возникла очень странная ситуация, при попытке сделать рядовой QObject::connect программа стабильно падает в функции
void QObjectPrivate::addConnection(int signal, Connection *c) на Q_ASSERT(c->sender == q_ptr); В другом проекте, использующем те же классы и коннект тех же сигнала и слота всё нормально. Может кто-нибудь сталкивался с подобной мистикой и знает, каким косяком в коде она может быть вызвана? А то совершенно непонятно даже где искать. Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: gil9red от Сентябрь 15, 2017, 07:10 Код в студию! :)
Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: kambala от Сентябрь 15, 2017, 10:35 проверь, что оба объекта, которые ты пытаешься связать, «живы»
Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: vic57 от Сентябрь 15, 2017, 13:26 Q_ASSERT(c->sender == q_ptr); если сегфолт м.б. q_ptr = null ?Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Crazy Sage от Сентябрь 18, 2017, 10:34 Код в студию! :) Код на котором вылетает - обычный коннект, в другом проекте он работает, так что дело не в нём. А другого кода там очень много и скорее всего присутствует какой-то скрытый конфликт, который сложно найти, не зная, что искать. Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Crazy Sage от Сентябрь 18, 2017, 11:25 Заметил закономерность, может кому-нибудь она о чём-то скажет.
При подключении к слотам проблемного объекта всё ок, при попытке подключиться к его сигналам - падение. Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Crazy Sage от Сентябрь 18, 2017, 13:51 Q_ASSERT(c->sender == q_ptr); если сегфолт м.б. q_ptr = null ?Проверил, q_ptr = 0x1de, c->sender = @0x1cd36780 Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: vic57 от Сентябрь 18, 2017, 14:27 Проверил, q_ptr = 0x1de, c->sender = @0x1cd36780 а старый метод connect работает? в 5.9 вроде поменяли схему надо callback или lambda добавлятьНазвание: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Bepec от Сентябрь 18, 2017, 15:00 А кода нет нет нет, а кода неееет. И обсуждать нечего.
Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Crazy Sage от Сентябрь 19, 2017, 08:48 А код бы и не помог.
Решение: Может кому на будущее поможет - если у вас начинается фигня с вылетами на коннекте в глубинах qt, поищите в коде #pragma pack push/pop у нас какой-то неизвестный герой, в хэдере подключавшемся на четвёртом или пятом уровне вложенности оставил #pragma pack push без парного к нему #pragma pack pop и Qt с этого сильно плохо стало. Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Alex Custov от Сентябрь 19, 2017, 11:51 Заметил закономерность, может кому-нибудь она о чём-то скажет. При подключении к слотам проблемного объекта всё ок, при попытке подключиться к его сигналам - падение. Налицо проблемы работы с памятью - двойное удаление указателей и т.п. Ищи ошибки в коде с помощью утилит типа valgrind. Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: vic57 от Сентябрь 19, 2017, 18:00 у нас какой-то неизвестный герой, в хэдере подключавшемся на четвёртом или пятом уровне вложенности оставил #pragma pack push без парного к нему #pragma pack pop и Qt с этого сильно плохо стало. если хедер кутэшный, дай ссылку на него. интересно однакоНазвание: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Crazy Sage от Сентябрь 19, 2017, 18:15 у нас какой-то неизвестный герой, в хэдере подключавшемся на четвёртом или пятом уровне вложенности оставил #pragma pack push без парного к нему #pragma pack pop и Qt с этого сильно плохо стало. если хедер кутэшный, дай ссылку на него. интересно однакоНет, хэдер наш, но если какой-то Qt-шный хэдер оказывается подключенным после него (что в большом проекте почти гарантировано и что у нас и произошло), то Qt от этой прагмы плохеет, а валгринд измененное выравнивание памяти не отлавливает. Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Bepec от Сентябрь 19, 2017, 21:00 Та после такой прагмы всё нафиг полетит :D
Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: vic57 от Сентябрь 20, 2017, 00:38 Нет, хэдер наш, но если какой-то Qt-шный хэдер оказывается подключенным после него (что в большом проекте почти гарантировано и что у нас и произошло), то Qt от этой прагмы плохеет, а валгринд измененное выравнивание памяти не отлавливает. да уж блин, засада. бэкапы - наше все :oНазвание: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: kambala от Сентябрь 21, 2017, 12:38 системой контроля версиями хоть пользуетесь? например, через git bisect можно было бы достаточно быстро найти проблему.
Название: Re: Странный вылет на connect'е [Qt 5.9] Отправлено: Crazy Sage от Сентябрь 21, 2017, 12:45 системой контроля версиями хоть пользуетесь? например, через git bisect можно было бы достаточно быстро найти проблему. Из-за большого проекта и изрядной его завязанности на железе, разрабатываемом параллельно, разные компоненты изначально собирались отдельно в тестовых проектах, а когда всё начали объединять в общий проект, тут-то оно и грохнулось (потому что в тестовом проекте цепочка к этому хэдеру оказалась в удачном месте и ничего не падало), так что и система контроля версий не помогла. |