Название: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 23, 2009, 16:30 Имеется относительно работоспособное приложение, единственным недостатком которого является то, что при выходе из него возникает ошибка тянущая за собой предложение отправить отчет в мелкософт. Как можно избавиться от последнего? (Раньше писал на делфи, там была такая функция - SetErrorMode)
Название: Re: Избавляемся от ошибок Отправлено: kuzulis от Ноябрь 23, 2009, 16:42 Это сегфаулт где-то :)
Ищите в коде. Возникает к примеру - если что-то удаляете уже удаленное/несуществующее или еще что-нибудь. Или что-то не удаляется при завершении приложения.. Обычно с потоками такое бывает и т.п. Название: Re: Избавляемся от ошибок Отправлено: spectre71 от Ноябрь 23, 2009, 16:46 Имеется относительно работоспособное приложение, единственным недостатком которого является то, что при выходе из него возникает ошибка тянущая за собой предложение отправить отчет в мелкософт. Как можно избавиться от последнего? (Раньше писал на делфи, там была такая функция - SetErrorMode) 1) Если это твоя прога - то надо правиь ошибку! 2) SetErrorMode - не дельфийская, а виндовая! MSDN: UINT SetErrorMode( UINT uMode ); Example: #include <Windows.h> SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 24, 2009, 09:48 Спасибо за ответы. Прога моя, но где глюк искать - не знаю. Имеется объект типа QSqlDataBase. Подключение производится нормально, запросы выполняются. Но после выхода из проги - краш. Комментирую работу с базой - краш пропадает.
Название: Re: Избавляемся от ошибок Отправлено: Prm от Ноябрь 24, 2009, 11:51 А перед завершением программы соединение с базой закрываете?
Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 24, 2009, 11:58 Проьовал по-разному. Выносил закрытие базы в отдельный пункт меню - вылетало на нем. Если не делал закрытие - ошибка появлялась на выходе из программы. Когда убирал работу с базой - ошибка не возникала вовсе.
Название: Re: Избавляемся от ошибок Отправлено: DmP от Ноябрь 24, 2009, 12:48 Проьовал по-разному. Выносил закрытие базы в отдельный пункт меню - вылетало на нем. Если не делал закрытие - ошибка появлялась на выходе из программы. Когда убирал работу с базой - ошибка не возникала вовсе. Если валится при закрытии БД, то не обязательно ошибка в этом месте, возможно что ранее удалили что то лишний раз, или где то вылезли за пределы массива.Название: Re: Избавляемся от ошибок Отправлено: ax от Ноябрь 24, 2009, 13:03 перед зарытием сделай всем активным QSqlQuery clear()
Название: Re: Избавляемся от ошибок Отправлено: Igors от Ноябрь 24, 2009, 13:24 Проьовал по-разному. Выносил закрытие базы в отдельный пункт меню - вылетало на нем. Если не делал закрытие - ошибка появлялась на выходе из программы. Когда убирал работу с базой - ошибка не возникала вовсе. Тогда и "закатчить" к местуКод: bool closeError = false; Название: Re: Избавляемся от ошибок Отправлено: spectre71 от Ноябрь 24, 2009, 13:54 Проьовал по-разному. Выносил закрытие базы в отдельный пункт меню - вылетало на нем. Если не делал закрытие - ошибка появлялась на выходе из программы. Когда убирал работу с базой - ошибка не возникала вовсе. Тогда и "закатчить" к местуКод: bool closeError = false; сегфаулт - так не поймать! Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 24, 2009, 14:07 Для проверки оставлял только коннект к базе. Все запросы отключены. Голый коннект. Исправлять больше нечего :). Коннект есть - есть ошибка. Коннекта нет - все в норме.
Название: Re: Избавляемся от ошибок Отправлено: spectre71 от Ноябрь 24, 2009, 14:21 Для проверки оставлял только коннект к базе. Все запросы отключены. Голый коннект. Исправлять больше нечего :). Коннект есть - есть ошибка. Коннекта нет - все в норме. Сделай тестовое приложение только с твоим соединением и расссоединением с базой, больше ничего, никаких левых обработок. И проверь есть ли ошибка. Название: Re: Избавляемся от ошибок Отправлено: lit-uriy от Ноябрь 24, 2009, 14:46 Aleksey_Zh, у тебя приложение случаем не консольное?
Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 24, 2009, 14:51 Это приложение и является тестовым. Запросы я делал для проверки работоспособности драйвера БД. Когда убедился в работоспособности - я все лишнее убрал. Сейчас приложение содержит только коннект к базе данных. Дисконнект я так же убрал (предварительно проверив) Когда пытаешься сделать дисконнект - происходит такая же ошибка.
Название: Re: Избавляемся от ошибок Отправлено: spectre71 от Ноябрь 24, 2009, 14:54 Это приложение и является тестовым. Запросы я делал для проверки работоспособности драйвера БД. Когда убедился в работоспособности - я все лишнее убрал. Сейчас приложение содержит только коннект к базе данных. Дисконнект я так же убрал (предварительно проверив) Когда пытаешься сделать дисконнект - происходит такая же ошибка. Код в студию! Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 24, 2009, 15:13 ui->setupUi(this);
this->setWindowFlags(Qt::WindowStaysOnTopHint); QSqlDatabase TMB; TMB = QSqlDatabase::addDatabase("QMYSQL"); TMB.setDatabaseName("tmse"); if (!TMB.open()) { QMessageBox::critical(0, "RealtorPlus", qApp->tr("Cannot open database.\n" "Unable to establish a database connection.\n" "Perhaps Qt was built without database support.\n\n" "Click Cancel to exit."), QMessageBox::Cancel); } else { QMessageBox::information(0,"","подключился"); Название: Re: Избавляемся от ошибок Отправлено: Igors от Ноябрь 24, 2009, 15:17 сегфаулт - так не поймать! Никто не говорил что это сегфаулт, может кто-то испустил throw. А если и сегфаулт - то только лучше - он обычно хорошо виден в отладчике. Вообще, Алексей, что пишет консоль, что показывает отладчик? Без этого гадать можно очень долго. Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 24, 2009, 15:24 AppName: testmysqlembedded.exe AppVer: 0.0.0.0 ModName: libmysqld.dll
ModVer: 0.0.0.0 Offset: 00051f79 Это выдает винда. D:\QTProjects\TestMySqlEmbedded\release\TestMySqlEmbedded.exe exited with code -1073741819 это выдается в консоли Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 24, 2009, 15:48 Прошу прощения, не заметил сообщение от lit-uriy.
Нет, приложение не консольное. Обычное Qt4 Gui Application Название: Re: Избавляемся от ошибок Отправлено: spectre71 от Ноябрь 24, 2009, 16:04 сегфаулт - так не поймать! Никто не говорил что это сегфаулт, может кто-то испустил throw. А если и сегфаулт - то только лучше - он обычно хорошо виден в отладчике. Вообще, Алексей, что пишет консоль, что показывает отладчик? Без этого гадать можно очень долго. Qt классы не испускают throw, так что не поможет. Название: Re: Избавляемся от ошибок Отправлено: SimpleSunny от Ноябрь 24, 2009, 16:11 Возможно проблема в том, что объект QSqlDatabase TMB; создается в конструкторе формы, и после выхода из него (конструктора) будет уничтожен, попробуй вынести объявление в *.h файл.
Название: Re: Избавляемся от ошибок Отправлено: lit-uriy от Ноябрь 24, 2009, 16:13 >>объект QSqlDatabase TMB ... будет уничтожен
а он потом и не нужен, соединение с БД (QSqlDatabase) устроено как "именованный одиночка" т.е. информация хранится в статических членах этого класса. Название: Re: Избавляемся от ошибок Отправлено: uriel от Ноябрь 24, 2009, 16:16 Если есть возможность собрать под Linux'ом, то попробуйте прогнать через valgrind.
А вообще правильно посоветовали: запустите под отладчиком и в месте сегфолта посмотрите состояние стека вызовов. Название: Re: Избавляемся от ошибок Отправлено: Igors от Ноябрь 24, 2009, 16:21 AppName: testmysqlembedded.exe AppVer: 0.0.0.0 ModName: libmysqld.dll Ну на этом далеко не уехать. "Консоль" имеется ввиду "консоль отладчика"ModVer: 0.0.0.0 Offset: 00051f79 Это выдает винда. D:\QTProjects\TestMySqlEmbedded\release\TestMySqlEmbedded.exe exited with code -1073741819 это выдается в консоли Название: Re: Избавляемся от ошибок Отправлено: spectre71 от Ноябрь 24, 2009, 16:49 ui->setupUi(this); this->setWindowFlags(Qt::WindowStaysOnTopHint); QSqlDatabase TMB; TMB = QSqlDatabase::addDatabase("QMYSQL"); TMB.setDatabaseName("tmse"); if (!TMB.open()) { QMessageBox::critical(0, "RealtorPlus", qApp->tr("Cannot open database.\n" "Unable to establish a database connection.\n" "Perhaps Qt was built without database support.\n\n" "Click Cancel to exit."), QMessageBox::Cancel); } else { QMessageBox::information(0,"","подключился"); Я не вижу в приведенном коде ошибки которая приводит к описанному падению. Вероятно ошибка возникает в подгружаемых dll(sql драйверов), может стоит их переинсталлять? Название: Re: Избавляемся от ошибок Отправлено: SASA от Ноябрь 24, 2009, 18:44 Надо запуститься в дебаге, а не гадать на кофейной гуще.
З.Ы. Вот все ругают студию, а такие ошибки показыват без всяких valgrind, и колстек покажет, и значение переменных. Название: Re: Избавляемся от ошибок Отправлено: uriel от Ноябрь 24, 2009, 19:11 Понимаю, что отчасти оффтоп, поэтому сразу З.Ы. :)
Так с отладочной информацией тебе в теории любой отладчик такое выдаст. Проблема-то как правило не в этом. Одно дело локализовать место падения, а другое - определить причины, которые к этому падению привели. И вот здесь уже valgrind может подсказать, что именно пошло не так: обращение по неправильному адресу, неинициализированный указатель, двойное освобождение памяти и так далее. Название: Re: Избавляемся от ошибок Отправлено: Alex Custov от Ноябрь 24, 2009, 19:23 Надо запуститься в дебаге, а не гадать на кофейной гуще. З.Ы. Вот все ругают студию, а такие ошибки показыват без всяких valgrind, и колстек покажет, и значение переменных. ну это любой нормальный отладчик покажет, а valrgind не отладчик :) Название: Re: Избавляемся от ошибок Отправлено: Mikhail от Ноябрь 24, 2009, 19:42 Откомпилировал твой код и удивлен твоим вопросом.
Никаких ошибок не возникло. Проверял на Qt 4.5.3, MSVC 2008 Express Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 25, 2009, 10:15 Я и сам удивляюсь падению. На обычном мускуле все работало нормально. Думаю что могут быть проблемы в libmysqld.dll - в версии 5.1.40 на офф сайте указано, что библиотека переделывалась. Есть насчет этого какие - либо мнения?
Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 25, 2009, 10:20 P.S. В дебаг версии кстати тоже самое выдается что и в релизе. Никаких отличий
Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 25, 2009, 16:03 Всем кто помогал мне в решении моей проблемы большое спасибо!!!! Проблема решена. Как и предпологал - загвоздка оказалась в библиотеке libmysqld.dll, поставляемой в сборке 5.1.40. Так что 5 часов потраченных на очередную пересборку и перекомпиляцию Qt не прошли даром.
Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 26, 2009, 08:42 Народ, я вчера сильно поторопился с выводами. Ошибка не пропала!!! Просто переставил qt на вирт машину с win sp3 (на основном компе - sp2). При компиляции код завершения приложения такой же -1073741819. Просто окошко ругательное не выдает...
Название: Re: Избавляемся от ошибок Отправлено: Mikhail от Ноябрь 26, 2009, 14:33 Как компилировал Qt: версия Qt, компилятор, параметры confiure?
Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Ноябрь 30, 2009, 10:33 Qt SKD_2009.04 компилил статически под mingw
configure -static -opensource -debug-and-release -qt-sql-mysql -qt-gif -qt-libpng -qt-libtiff -webkit Название: Re: Избавляемся от ошибок Отправлено: Aleksey_Zh от Декабрь 02, 2009, 09:27 02.12.09 - пересобрал Qt SDK 2009.02 с поддержкой mysqld. Пересборку делал абсолютно идентичную той, что была произведена на 2009.04. Получил работоспособную версию. У кого - нибудь еще были проблемы с 04 SDK?
|