Russian Qt Forum
Ноябрь 26, 2024, 16:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Избавляемся от ошибок  (Прочитано 17375 раз)
Aleksey_Zh
Гость
« Ответ #15 : Ноябрь 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,"","подключился");
   
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Ноябрь 24, 2009, 15:17 »

сегфаулт - так не поймать!
Никто не говорил что это сегфаулт, может кто-то испустил  throw. А если и сегфаулт - то только лучше - он обычно хорошо виден в отладчике.  Вообще, Алексей, что пишет консоль, что показывает отладчик? Без этого гадать можно очень долго.
Записан
Aleksey_Zh
Гость
« Ответ #17 : Ноябрь 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

это выдается в консоли
Записан
Aleksey_Zh
Гость
« Ответ #18 : Ноябрь 24, 2009, 15:48 »

Прошу прощения, не заметил сообщение от lit-uriy.
Нет, приложение не консольное. Обычное Qt4 Gui Application
Записан
spectre71
Гость
« Ответ #19 : Ноябрь 24, 2009, 16:04 »

сегфаулт - так не поймать!
Никто не говорил что это сегфаулт, может кто-то испустил  throw. А если и сегфаулт - то только лучше - он обычно хорошо виден в отладчике.  Вообще, Алексей, что пишет консоль, что показывает отладчик? Без этого гадать можно очень долго.

Qt классы не испускают throw, так что не поможет.
Записан
SimpleSunny
Гость
« Ответ #20 : Ноябрь 24, 2009, 16:11 »

Возможно проблема в том, что объект QSqlDatabase TMB; создается в конструкторе формы, и после выхода из него (конструктора) будет уничтожен, попробуй вынести объявление в *.h файл.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #21 : Ноябрь 24, 2009, 16:13 »

>>объект  QSqlDatabase TMB ... будет уничтожен
а он потом и не нужен, соединение с БД (QSqlDatabase) устроено как "именованный одиночка" т.е. информация хранится в статических членах этого класса.
Записан

Юра.
uriel
Гость
« Ответ #22 : Ноябрь 24, 2009, 16:16 »

Если есть возможность собрать под Linux'ом, то попробуйте прогнать через valgrind.
А вообще правильно посоветовали: запустите под отладчиком и в месте сегфолта посмотрите состояние стека вызовов.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Ноябрь 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

это выдается в консоли
Ну на этом далеко не уехать. "Консоль" имеется ввиду "консоль отладчика"
Записан
spectre71
Гость
« Ответ #24 : Ноябрь 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 драйверов), может стоит их переинсталлять?
Записан
SASA
Гость
« Ответ #25 : Ноябрь 24, 2009, 18:44 »

Надо запуститься в дебаге, а не гадать на кофейной гуще.
З.Ы. Вот все ругают студию, а такие ошибки показыват без всяких valgrind, и колстек покажет, и значение переменных.
Записан
uriel
Гость
« Ответ #26 : Ноябрь 24, 2009, 19:11 »

Понимаю, что отчасти оффтоп, поэтому сразу З.Ы. Улыбающийся
Так с отладочной информацией тебе в теории любой отладчик такое выдаст.
Проблема-то как правило не в этом. Одно дело локализовать место падения, а другое - определить причины, которые к этому падению привели. И вот здесь уже valgrind может подсказать, что именно пошло не так: обращение по неправильному адресу, неинициализированный указатель, двойное освобождение памяти и так далее.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #27 : Ноябрь 24, 2009, 19:23 »

Надо запуститься в дебаге, а не гадать на кофейной гуще.
З.Ы. Вот все ругают студию, а такие ошибки показыват без всяких valgrind, и колстек покажет, и значение переменных.

ну это любой нормальный отладчик покажет, а valrgind не отладчик Улыбающийся
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #28 : Ноябрь 24, 2009, 19:42 »

Откомпилировал твой код и удивлен твоим вопросом.
Никаких ошибок не возникло.

Проверял на  Qt 4.5.3, MSVC 2008 Express
Записан
Aleksey_Zh
Гость
« Ответ #29 : Ноябрь 25, 2009, 10:15 »

Я и сам удивляюсь падению. На обычном мускуле все работало нормально. Думаю что могут быть проблемы в libmysqld.dll - в версии 5.1.40 на офф сайте указано, что библиотека переделывалась. Есть насчет этого какие - либо мнения?
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.11 секунд. Запросов: 23.