Я в тупике от этой ошибки. Любые предложения о том, как отследить его, будут оценены.
Предыстория:
Я пытался реализовать представление ogre3d как QQuickItem в Qt5. Есть пример (qmlogre), который показывает, что это возможно. Код примера нуждался в значительном рефакторинге для Win32 и делал больше, чем просто демонстрацию. Пример является лишь доказательством концепции.
Проблема:
Когда я вызываю определенный метод в коде Ogre (SceneManager::createEntity), элемент Qt больше не будет отображаться. Если я закомментирую вызов метода, он будет отображаться нормально. Если я закомментирую код в методе и заменю его на «возврат 0», он больше не будет отображаться. Рассматриваемый код не связан с графикой (он загружает трехмерный объект в память).
Что я пробовал:
- Проверен журнал людоеда, где показаны исключения.
- перенаправил ведение журнала Qt в файл для просмотра предупреждений/исключений.
- Проверено "этот" указатель. Я динамически приводил this при входе в метод к классу, в котором он работал, и получил ненулевой указатель. Итак, rtti считает, что это правильный указатель класса.
- Чтобы убедиться, что код Qt правильный, я заменил пользовательский код рендеринга из примера qmlogre кодом, который рендерит прямоугольник с плоским цветом.
- Я, кажется, не потерял память
Могу ли я запустить что-то такое большое и сложное под valgrind? Есть ли подобные полезные инструменты? (Компилятором является Mingw, предоставленный Qt в загрузке версии 5.1 для Windows 7)
Я понимаю, что Qt5 по умолчанию многопоточный. Как узнать, превысил ли размер стека потоков?
Ogre не является потокобезопасным. Возможно ли, что код Qt одновременно работает в разных потоках и приводит к сбою людоеда? Мой код вызывается событием из QML (он находится в слоте Qt).