2014-10-02 3 views
1

У меня есть приложение Qt5/C++, которое работает нормально, но при запуске в режиме отладки (GDB) эта ошибка появляется на консоли QT Creator (STDERR) - ИНОГДА !:Qt5/C++ генерирует ошибку «Corrupted shared library list» во время отладки

Corrupted shared library list: 0x7fffe8008e90 != 0x751e50 

Я не могу найти никаких ссылок на причины, и я не могу понять, что запуск его (другое что-то делать с помощью QLinkedList) я попытался переключения. к QVector, но иногда появляется одна и та же ошибка.

Что это и как его исправить? Valgrind говорит, что нет коррупции памяти ... так ли это ложная проблема с сообщениями? Или я делаю что-то неправильно.


Я проследил вышеуказанную ошибку до последней строки (строка 4) ниже.

Settings *programSettings = Settings::instance(); 
QString driver=programSettings->database_driver(); 
driver="QMYSQL"; // Override for testing 
m_db = QSqlDatabase::addDatabase(driver); 

Это не имеет никакого смысла для меня ... может кто-нибудь объяснить, почему QSqlDatabase :: addDatabase линия вызывает повреждение? Также, почему ошибка появляется ТОЛЬКО при отладке ... но не при запуске без gdb?

+0

Вы на Linux? –

+0

Я не думаю, что Valgrind гарантированно поймает все категории ошибок. (Например, из коробки, он не захватывает переполнения массива в стеке.) Я не знаю, может ли быть ошибка, вызывающая это сообщение, или нет. –

+0

Да - работает на Linux 64-разрядная Fedora 20. У меня установлен режим отладки Qt Creator (так что все параметры отладки должны быть включены) – TSG

ответ

0

Основываясь на количестве просмотров, похоже, много людей с этой проблемой. Мы упростили код до простого примера, а затем воспроизвели проблему. Источником проблемы является не пользовательский код, а сам Qt Creator. Мы не можем идти дальше - просто мириться с ним, пока не возникнет проблема с Qt Creator.

0

Похоже, вы пишете память, которая не принадлежит вам. Похоже, вы разыскиваете указатель, который имеет неинициализированное значение. Скомпилируйте приложение с включенными предупреждениями и убедитесь, что вы понимаете все предупреждения. После этого вам, возможно, потребуется запустить аудит кода, после того как вы минимизируете код, конечно.

+0

Я не могу воспроизвести ошибку при переходе кода через отладчик. Есть ли способ утвердить (или что-то подобное) действительный указатель и остановить мой код, если он недействителен? – TSG

+0

Нет, к сожалению, не существует способа утверждать такую ​​вещь. Вероятно, вы не можете воспроизвести, когда вы переходите, потому что код (например, цикл событий) работает много раз в секунду ... –

+0

После большой отладки и создания кода примера это, похоже, проблема Qt Creator. – TSG

 Смежные вопросы

  • Нет связанных вопросов^_^