@Perzh

Почему не срабатывает сигнал в режиме Release?

Здравствуйте.
Столкнулся с такой проблемой: в Debug версии фича работает, в Release версии - нет. Начал дебажить Release версию с помощью логов. Выяснил, что нужный метод вообще не запускается, хотя должен был. Этот метод является слотом, т.е. срабатывает по сигналу обновления некоторого объекта. Коннект вроде проходит нормально (стоит Q_ASSERT(connect(...))). Подскажите пожалуйста, что может быть не так?

P.S.: IDE = MS Visual Studio 2008

P.P.S.: Подключил к этому сигналу еще один слот, он тоже не работает. Т.е., мне кажется, что сигнал просто не генерируется.
  • Вопрос задан
  • 2618 просмотров
Решения вопроса 1
bogolt
@bogolt
>Коннект вроде проходит нормально (стоит assert)
Подозреваю что вы написали нечто в таком духе
assert(connect(signal(), slot());
и в этом ваша ошибка.
Дело в том что в релизной сборки все ассерты из кода выкидываются. Есть дефайн, гласящий что в дебаге ассерты выводят сообщение об ошибке, а в релизе меняются на void. А так как выкинулся ассерт то выкинулась и ваша функция.
Так что проверяйте результат функций не в ассертах, ну или вначале получите значение функции а потом пихайте его в ассерт.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lAtrey
Release просто не подходит для отладки. При Release компилятор проводит оптимизацию кода, и поэтому, например, при пошаговой отладке с текущей строки можно перескочить на десять строк ниже, и т.д. Так что фича работает, но так вы ее не отладите. Работайте в Debug.
p.s.: эти сведения для MSVS, но, полагаю, и в qt нечто аналогичное.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы