Qt: Функция не имеет адреса, возможно, из-за оптимизации компилятора

#visual-studio #qt #cmake

#visual-studio #qt #cmake

Вопрос:

Я работаю над проектом Qt на основе CMake в MS Visual Studio. Когда я пытаюсь оценить любой метод объекта Qt, я получаю сообщение об ошибке:

 Function lt;blablablagt; has no address, possibly due to compiler optimizations.  

Изображение: Ошибка оценки QuickWatch

Я строю в режиме ОТЛАДКИ; я вижу, что компилятор вызывается без каких-либо оптимизаций:

 cl.exe ... /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1  

Кроме того, я проверил, загружены ли PDF-файлы:

Изображение: Окно VS Modules с загруженными PDF-файлами

Но ничто из этого не помогает: все объекты оцениваются хорошо, но Qt — нет.

Есть ли что-нибудь, что заставит Visual Studio оценивать свойства объектов Qt?

Комментарии:

1. Вы привели пример этого QString::isEmpty() метода. Вы получаете ту же ошибку, если на самом деле используете метод в коде? Компилятор не может оптимизировать его в этом случае, и поэтому вы можете исключить это как источник проблемы.

2. В коде все работает довольно хорошо. Если добавить qDebug() lt;lt; fileName.isEmpty() , я вижу true или false в журналах.

3. Хорошо, и если вы добавите qDebug() lt;lt; fileName.isEmpty() , сможете ли вы затем оценить свойство в Visual Studio?

4. Нет. Дело в том, что Visual Studio не оценивает ни один метод Qt. Независимо от его использования в коде.

5. Хорошо, значит, дело не в оптимизации компилятора, а в том, что Visual Studio не может получить доступ к определенным методам. Может ли Visual Studio оценить метод, который вы сами написали в производном классе? Как насчет перезаписанного метода?