Название: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 12:00 Если в TestApp раскомментировать два qDebug(), то все работает как положено.
Код приложения: Код
Код
Код
Название: Re: Почему падает тестовое приложение Отправлено: __Heaven__ от Апрель 08, 2015, 12:07 У меня отработало без вылета.
Win7x64 qt5.4.1 mingw Название: Re: Почему падает тестовое приложение Отправлено: Пантер от Апрель 08, 2015, 12:14 Бггггг. :D
А теперь внимательно присмотрись к тому, как QCoreApplication принимает argc. Название: Re: Почему падает тестовое приложение Отправлено: Пантер от Апрель 08, 2015, 12:15 Да, синглтон у тебя херовый.
Название: Re: Почему падает тестовое приложение Отправлено: __Heaven__ от Апрель 08, 2015, 12:23 После отработки конструктора TestApp происходит артефакт, отгадал?
Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 12:23 У меня отработало без вылета. в qt4.8 у меня тоже без вылета отработало.Win7x64 qt5.4.1 mingw Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 12:25 Бггггг. :D Жесть! В жизни б не догадался) Никогда не обращал на это внимание.А теперь внимательно присмотрись к тому, как QCoreApplication принимает argc. Зачем так сделали, не понятно. Спасибо! Название: Re: Почему падает тестовое приложение Отправлено: Пантер от Апрель 08, 2015, 12:25 Когда-то я такую проблему отхватил через 4 года существования проекта (переданного мне). То есть, 4 года все работало и внезапно стало падать. Причем, только у меня. Так сошлись звезды, версия компилятора и что-то там еще.
Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 12:26 Да, синглтон у тебя херовый. Чем он плох?Название: Re: Почему падает тестовое приложение Отправлено: Пантер от Апрель 08, 2015, 12:27 Бггггг. :D Жесть! В жизни б не догадался) Никогда не обращал на это внимание.А теперь внимательно присмотрись к тому, как QCoreApplication принимает argc. Зачем так сделали, не понятно. Спасибо! Название: Re: Почему падает тестовое приложение Отправлено: Пантер от Апрель 08, 2015, 12:28 Тем, что он не синглтон. Кто будет проверять на то, что инстанс ненулевой?
Название: Re: Почему падает тестовое приложение Отправлено: __Heaven__ от Апрель 08, 2015, 12:32 А для чего такие синглтоны служат? Никогда не применял
Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 12:34 Тем, что он не синглтон. Кто будет проверять на то, что инстанс ненулевой? Да это я так сделал для теста.можно добавить Q_ASSERT(instance_ == nullptr) :) Так то его вообще нельзя назвать синглтоном, нет функции возвращающей экземпляр) Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 12:35 А для чего такие синглтоны служат? Никогда не применял Например, QCoreApplication типичный пример синглтона.Название: Re: Почему падает тестовое приложение Отправлено: Пантер от Апрель 08, 2015, 12:37 В синглтонах конструктор делают приватным и работают через SingletonClassName::instance()->someMethod().
Название: Re: Почему падает тестовое приложение Отправлено: Igors от Апрель 08, 2015, 13:00 Только вчера за это тоже получил получил по дюнделю :) Как они сами объясняют - потому что число аргументов может меняться. Да, может, напр я зарядил имя файла (одного) в командной строке. На старте в командной строке получаю ... 4 параметра.
1) Полное имя приложения 2) Имя файла что я дал 3) Какая-то лабуда типа -хххDebug 4) "YES" Когда запустился цикл событий мне пришло событие QEvent::OpenFile и теперь остался 1 аргумент. Хммм... ну ладно, а как мне самому, "до того" убрать/отфильтровать весь этот хлам из командной строки? Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 14:33 Только вчера за это тоже получил получил по дюнделю :) Как они сами объясняют - потому что число аргументов может меняться. Да, может, напр я зарядил имя файла (одного) в командной строке. На старте в командной строке получаю ... 4 параметра. Ну так видимо, до того, как до него доберется Qt. До создания QApplication.1) Полное имя приложения 2) Имя файла что я дал 3) Какая-то лабуда типа -хххDebug 4) "YES" Когда запустился цикл событий мне пришло событие QEvent::OpenFile и теперь остался 1 аргумент. Хммм... ну ладно, а как мне самому, "до того" убрать/отфильтровать весь этот хлам из командной строки? Название: Re: Почему падает тестовое приложение Отправлено: Igors от Апрель 08, 2015, 14:46 Ну так видимо, до того, как до него доберется Qt. До создания QApplication. Когда QApplication создано - мусор в командной строке еще торчит, И когда, по каким правилам оно его вычищает - хзНазвание: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 14:46 В синглтонах конструктор делают приватным и работают через SingletonClassName::instance()->someMethod(). QApplication тоже синглтон, но конструктор там не приватный.Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 08, 2015, 15:00 Ну так видимо, до того, как до него доберется Qt. До создания QApplication. Когда QApplication создано - мусор в командной строке еще торчит, И когда, по каким правилам оно его вычищает - хзКод
Код
Код
Эксперимент это подтверждает. -style test.qss исчез из аргументов, после создания экземпляра QApplication, до запуска очереди событий. Название: Re: Почему падает тестовое приложение Отправлено: Igors от Апрель 09, 2015, 08:24 Эксперимент это подтверждает. -style test.qss исчез из аргументов, после создания экземпляра QApplication, до запуска очереди событий. А у меня не подтверждает - печатаю qApp->arguments из своего констуктора, стало быть конструктор QApplication уже отработал.Название: Re: Почему падает тестовое приложение Отправлено: andrew.k от Апрель 09, 2015, 15:31 Эксперимент это подтверждает. -style test.qss исчез из аргументов, после создания экземпляра QApplication, до запуска очереди событий. А у меня не подтверждает - печатаю qApp->arguments из своего констуктора, стало быть конструктор QApplication уже отработал.Qt 5.2.1 Ubuntu Код: Код
Вывод: Код
|