Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] подение при вызове exec() ! 
V
    Опции темы
Любитель
Дата 8.6.2009, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Ладно.. В любом случае глупо гадать smile Проще увидеть нормальный стект-трейс от дебаггера smile

Цитата(SABROG @  7.6.2009,  22:58 Найти цитируемый пост)
А я думаю наоборот не лишне перестраховаться, если забудешь сам удалить. 

Это уже философский вопрос.. Но, если свято следовать принципам RAII, то такой ситуации ("забудешь удалить") просто не может быть.


--------------------
PM MAIL ICQ Skype   Вверх
SABROG
Дата 8.6.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Любитель @  8.6.2009,  09:16 Найти цитируемый пост)
Это уже философский вопрос.

Ну да, для этих целей есть QSharedPointer.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Remiznik
Дата 8.6.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



Поделюсь своими соображениями ну от специалистов жду ответа такое возможно )

Для начла наверно всетаки придется поподробнее рассказать о том что хочу делать !

Есть главная программа и нужно открыть файл но не один их несколько в одном данный в другом описание ! Файл с даными очень большой .... и потому перед загрузкой файла выскакивает форма в которой указано диапазон файла (временной) к примеру от 0 до 20 сек это примерно файл весом 50 и больше метров !

так и все эти загрузки происходят в одной функции и вот я подумал если даных слишком много то стек может переполниться и упасть всё приложение ... но я не уверен это догадка ! Вопрос только почему падение происходит на функции exec() тоесть при отображение формы и блокировки !

Код

void MainWindow::openFile()
{
    if( loadFile ) { fileCloseProject(); }
    
     QString fileName = QFileDialog::getOpenFileName(this,"Open...", ".formular"); 
     std::cerr<<(fileName.toStdString()).c_str()   ;
            if (!fileName.isEmpty())
            {
          loadFile=true;
                   readFormular( fileName );  // чтение начального файла с описанием данных 
                  showFormular();                 // отображение даных в QTextEdit
                fileName.replace(".formular",".data");
           
                navigator= new NavigatorForm(this); // собственный клас тоже большого размера 
                       // настройка этого окна        
                            
                       if (checker->->isChecked())
                       {          
                              showDialog(); // эта та функция в которой происходит вызов формы с диапазоном файла  где и происходит падение 
                        }
                       readData(fileName,MeasChannels);   //чтение  основных даных 
                       ........
                 }
}
         


это далеко не полный перечень всего что делается в одной функции так как после загрузки файла сразу нужно вывести дополнительные окна для работы . так что функции получилась очень большая и еше она загружает много даных в оперативку из файла !! 
так может она падать из-за того что очень большая ?
PM MAIL   Вверх
SABROG
Дата 8.6.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Remiznik @  8.6.2009,  19:02 Найти цитируемый пост)
std::cerr<<(fileName.toStdString()).c_str()

Жесть какая. Чем qPrintable() не угодил? Да и вообще, если надо писать в stderr используй это:

Код

qCritical("File '%s'...", qPrintable(fileName));


Если просто в консоль то qDebug() или QTextStream(stdout). Хотя конечно никто не запрещает использовать стандартную библиотеку.

Цитата(Remiznik @  8.6.2009,  19:02 Найти цитируемый пост)
if (checker->->isChecked())

А это я вообще не понял.

P.S.: кстати, что сказал отладчик?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Remiznik
Дата 8.6.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



это всё не суть важно меня подения волнуют больше !

с отладчиком не разабрался почемуто при входе в QFileDialog::getOpenFileName(this,"Open...", ".formular");  приложение виснит и а отладчик не даёт дальше крутить шаги (
PM MAIL   Вверх
SABROG
Дата 8.6.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Remiznik @  8.6.2009,  22:44 Найти цитируемый пост)
это всё не суть важно меня подения волнуют больше !

Тогда предлагаю забыть о коде и сосредоточиться на отладке.

Цитата(Remiznik @  8.6.2009,  22:44 Найти цитируемый пост)
с отладчиком не разабрался почемуто

Просто документацию не читал, причина то понятна.

Цитата(Remiznik @  8.6.2009,  22:44 Найти цитируемый пост)
отладчик не даёт дальше крутить шаги

"крутить"? Куда? Какой отладчик используешь? Где backtrace, call stack?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Remiznik
Дата 8.6.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



gdb 6  запускаю приложение просто под отладчиком всё нармально работает но при вызове QFileDialog::getOpenFileName виснит приложение и нечего не происходит не появляеться окно диалога !!

да с документацией только сегодня начал знакомиться так что пока разбираюсь что кчему )
PM MAIL   Вверх
Remiznik
Дата 17.6.2009, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



покопался отладчиком вот что выдаёт стек вызывов !
Код

681                     tmpStr.setNum((int)(endFile*period/time));
(gdb)
682                     intervalDialog->lineEditEnd->setText(tmpStr);
(gdb)
683                             if( intervalDialog->exec() == QDialog::Accepted )
(gdb) s
 
Program received signal SIGSEGV, Segmentation fault.
0x406641c7 in QAbstractButton::isChecked () from /usr/lib/qt4/lib/libQtGui.so.4
(gdb) bt
#0  0x406641c7 in QAbstractButton::isChecked () from /usr/lib/qt4/lib/libQtGui.so.4
#1  0x0805177b in MainWindow::paintEvent (this=0xbffff430, e=0xbfffd570) at src/mainwindow.cpp:406
#2  0x4025c711 in QWidget::event () from /usr/lib/qt4/lib/libQtGui.so.4
#3  0x406ce853 in QMainWindow::event () from /usr/lib/qt4/lib/libQtGui.so.4
#4  0x4020eb40 in QApplicationPrivate::notify_helper () from /usr/lib/qt4/lib/libQtGui.so.4
#5  0x4020d57c in QApplication::notify () from /usr/lib/qt4/lib/libQtGui.so.4
#6  0x40e83b18 in QCoreApplication::notifyInternal () from /usr/lib/qt4/lib/libQtCore.so.4
#7  0x40273e74 in qt_sendSpontaneousEvent () from /usr/lib/qt4/lib/libQtGui.so.4
#8  0x40256663 in QWidgetPrivate::drawWidget () from /usr/lib/qt4/lib/libQtGui.so.4
#9  0x403c58fa in QWidgetBackingStore::cleanRegion () from /usr/lib/qt4/lib/libQtGui.so.4
#10 0x403c37fc in qt_syncBackingStore () from /usr/lib/qt4/lib/libQtGui.so.4
#11 0x4025cb79 in QWidget::event () from /usr/lib/qt4/lib/libQtGui.so.4
#12 0x406ce853 in QMainWindow::event () from /usr/lib/qt4/lib/libQtGui.so.4
#13 0x4020eb40 in QApplicationPrivate::notify_helper () from /usr/lib/qt4/lib/libQtGui.so.4
#14 0x4020d57c in QApplication::notify () from /usr/lib/qt4/lib/libQtGui.so.4
#15 0x40e83b18 in QCoreApplication::notifyInternal () from /usr/lib/qt4/lib/libQtCore.so.4
#16 0x40e8481c in QCoreApplicationPrivate::sendPostedEvents () from /usr/lib/qt4/lib/libQtCore.so.4
#17 0x40e84505 in QCoreApplication::sendPostedEvents () from /usr/lib/qt4/lib/libQtCore.so.4
#18 0x40eb0435 in ?? () from /usr/lib/qt4/lib/libQtCore.so.4
#19 0x40fbe3c3 in ?? () from /lib/libglib-2.0.so.0
#20 0x0806c998 in ?? ()
#21 0x00000000 in ?? ()
(gdb) n
Single stepping until exit from function _ZNK15QAbstractButton9isCheckedEv,
which has no line number information.
 
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.         


у кого есть какие соображение ? 
PM MAIL   Вверх
mes
Дата 17.6.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Remiznik @  17.6.2009,  10:20 Найти цитируемый пост)
у кого есть какие соображение ?  

догадка : невалидный this у кнопки
покажите содержание MainWindow::paintEvent, конструктора этого класса, функцию в которой создаются контролы (если не в конструкторе) и список дата_членов.

Это сообщение отредактировал(а) mes - 17.6.2009, 11:38


--------------------
PM MAIL WWW   Вверх
SABROG
Дата 17.6.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Другая догадка - проблема в Qt с отрисовкой. Уже третий раз сталкиваюсь, похожий стек вызовов тут у человека и связан тоже с чекингом: http://www.forum.crossplatform.ru/index.php?showtopic=2931


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Любитель
Дата 17.6.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(SABROG @  17.6.2009,  13:08 Найти цитируемый пост)
Другая догадка - проблема в Qt с отрисовкой.

Да не - тут же на своём обработчики пэинта падает:
Цитата(Remiznik @  17.6.2009,  11:20 Найти цитируемый пост)
at src/mainwindow.cpp:406


Там похоже проверка чека какой-т кнопки по невалидному указателю на эту кнопку.


--------------------
PM MAIL ICQ Skype   Вверх
Remiznik
Дата 17.6.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



вот вы столько понаписали но я както не догоняю каким оброзом exec() связан с каким-то QAbstractButton::isChecked ()  но это ешо както понять можно на форме кнопки есть !

но вот эта страка для меня вобше загадка 
#1  0x0805177b in MainWindow::paintEvent (this=0xbffff430, e=0xbfffd570) at src/mainwindow.cpp:406
каким оброзом exec() связон с прорисовкой главного окна моего приложения ! И до этого проблем с функцией отрисовки небыло так что мне нечего не понятно !
PM MAIL   Вверх
Любитель
Дата 17.6.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



К тебе пришёл мессадж на перерисовку (MainWindow) - вызвалось событие перерисовки. Вполне нормально. Вопрос в том, почему оно свалилось smile Покажи 406-ую строчку-то эту smile Затем посмотри, к какой там кнопке обращение. И проверь все присваивания и вызовы делита для этого указателя (а также все смерти парента этой кнопки и т. д.).


--------------------
PM MAIL ICQ Skype   Вверх
mes
Дата 17.6.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Remiznik @  17.6.2009,  14:09 Найти цитируемый пост)
каким оброзом exec()

Интересно, а что по Вашему делает метод exec() ?



--------------------
PM MAIL WWW   Вверх
Remiznik
Дата 17.6.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



давайте по порядку ))

во первых !

это какойто страный вызов MainWindow::paintEvent (this=0xbffff430, e=0xbfffd570) at src/mainwindow.cpp:406 так как в начале кажой функции у менять есть консольное сообшение о том что даная ыункция вызываеться и при подение на консоли нечего нет тоесть вызываеться какаято левая функция или както страно !

во вторых 

я смотрел стек при нармальной работе это всего не вызываеться даный стек который я привёл создаёться только при падении 

в третьих 
учитывая предыдцшее что я не могу отследить в каком месте имено падение так как я явно при нармально работе не вижу какая функция вызываеться как такое вобше может происходить !

mes,  я думаю что метод exec()  прорисовывает по верх всех окон окна которое его вызвало и блокирует работу всего остального приложения . Как это происходит я незнаю и как уже сказал в пунке 2 отследить что вызываеться какието стороние функции можно только при падении. 
И есле уж и вызываеться прорисовка главного окна то только после того как происходит событие закрытие диалогового окна вызвавшего exec() но ни как до этого .... ведь в этом нет смысла !

ну я так думаю ! обьясните если я не прав очень хочеться разобраться !

П.С ешо раз напоню что приложение падает не каждый раз при вызове exec() . Оно может упасть и с 1-го вызова так и 10-го.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.