Здравствуйте.
Столкнулся с такой проблемой: в Debug версии фича работает, в Release версии - нет. Начал дебажить Release версию с помощью логов. Выяснил, что нужный метод вообще не запускается, хотя должен был. Этот метод является слотом, т.е. срабатывает по сигналу обновления некоторого объекта. Коннект вроде проходит нормально (стоит Q_ASSERT(connect(...))). Подскажите пожалуйста, что может быть не так?
P.S.: IDE = MS Visual Studio 2008
P.P.S.: Подключил к этому сигналу еще один слот, он тоже не работает. Т.е., мне кажется, что сигнал просто не генерируется.
>Коннект вроде проходит нормально (стоит assert)
Подозреваю что вы написали нечто в таком духе assert(connect(signal(), slot());
и в этом ваша ошибка.
Дело в том что в релизной сборки все ассерты из кода выкидываются. Есть дефайн, гласящий что в дебаге ассерты выводят сообщение об ошибке, а в релизе меняются на void. А так как выкинулся ассерт то выкинулась и ваша функция.
Так что проверяйте результат функций не в ассертах, ну или вначале получите значение функции а потом пихайте его в ассерт.
Release просто не подходит для отладки. При Release компилятор проводит оптимизацию кода, и поэтому, например, при пошаговой отладке с текущей строки можно перескочить на десять строк ниже, и т.д. Так что фича работает, но так вы ее не отладите. Работайте в Debug.
p.s.: эти сведения для MSVS, но, полагаю, и в qt нечто аналогичное.
Спасибо за отзыв. Не понимаю что вы хотели сказать. Я знаю, что отлаживаться нужно в Debug режиме. Проблема в том, что метод не запускается в Release сборке.