Приложение остановлено так как оно получило сигнал от операционной системы qt
Скажите, почему вот это не работает и программа вылетает?
AndreiSk » 08 мар 2011, 03:33
dccharacter » 08 мар 2011, 03:53
[Main Instruction]
Com2tcP.exe has stopped working
[Content]
Windows is checking for a solution to the problem.
Если в дебагере смотреть, то
Кстати, вопрос - а это вообще умно - перебирать все стейты в свитче? У ошибок есть метод .toString(), а вот у состояний - нету. Может как-то можно его без switch привести к виду строки?
=DeaD= » 08 мар 2011, 09:32
Segmentation Fault это что-то с библиотеками вроде.
Откуда код взят и что передаёте в функцию?
blindman » 08 мар 2011, 09:36
В отладчике надо смотреть по стэку вызовов откуданоги растутVooon » 08 мар 2011, 13:45
Сегфолт возникает из-за выхода за пределы памяти.
Смотри все указатели.
dccharacter » 08 мар 2011, 17:30
А я не умею ((
Unhandled exception at 0x6a15b15b in Com2tcP.exe: 0xC0000005: Access violation reading location 0x00000129.
Происходит при вызове statusBar->showMessage();
Я подозреваю, что дело в том, что параметр должен быть const, а я передаю не const. Сейчас еще потуплю немного. Строки для меня это самое гадкое после указателей.
А вот в этом слоте уже не работает:
Код: Выделить всё • Развернуть
Может с областью видимости что-то.
blindman » 08 мар 2011, 17:44
Телепатирую.socketStatusBar у тебя объявлен как член класса MainWindow, а в конструкторе ты создаешь локальную переменную socketStatusBar. socketStatusBar - член класса MainWindow остается неинициализированным, а ты к нему обращаешься.
dccharacter » 08 мар 2011, 17:51
blindman писал(а): Телепатирую.socketStatusBar у тебя объявлен как член класса MainWindow, а в конструкторе ты создаешь локальную переменную socketStatusBar. socketStatusBar - член класса MainWindow остается неинициализированным, а ты к нему обращаешься.
Уверен что так и есть
Но я уже окончательно запутался, что делаеть? Не объявлять членом класса?
Добавлено спустя 1 минуту 2 секунды:
ЙЕЕЕЕЕЕЕЕЕСССС
Спасибо )))
Оно и было
Добавлено спустя 32 секунды:
Правда оно теперь не работает, но это мелочи Зато не вылетает ))
Добавлено спустя 3 минуты 6 секунд:
хе хе хе, работает
dccharacter » 09 мар 2011, 21:04
А как подключить репозиторий ORFA терминала? Mercurial установил, создал хранилище, все опции mercurial в меню инструменты qt creator'а продолжают быть серыми, недоступными?
Добавлено спустя 10 минут 20 секунд:
неактуально
Angel71 » 09 мар 2011, 21:20
Код: Выделить всё • Развернутьвот как-то так иногда можно. и вопросов меньше возникает и софт как минимум не вылетает. Последний раз редактировалось Angel71 09 мар 2011, 21:29, всего редактировалось 1 раз.
dccharacter » 09 мар 2011, 21:28
blindman » 10 мар 2011, 06:24
Angel71 писал(а): вот как-то так иногда можно. и вопросов меньше возникает и софт как минимум не вылетает.dccharacter » 10 мар 2011, 14:00
Для заметки: серия статей на хабре "Hg init" про Mercurial:
Добавлено спустя 3 минуты 11 секунд:
Похоже бился я с коммитом через то, что центральный репозиторий в самом начале не склонировал. Правда пока не понял, как это сделать, но вечером, похоже, надо будет хранилища пересоздавать.
dccharacter » 10 мар 2011, 22:32
Люди, помогите наладить репозиторий Mercurial в QT. Захожу в меню "Система контроля версий"->Mercurial. Активен только один пункт - Создать хранилище. Выбираю папку, там автоматически создается папка .hg, т.е. хранилище создано. После этого ничегошеньки не меняется. В меню точно также активен отлько один пункт - создать хранилище. При попытке создать его в той же папке, говорит что там уже есть хранилище и предлагает отказаться.
ЙЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕС, нашел в хелпе тудыть его растудыть. Надо выбрать меню файл, создать НОВЫЙ ПРОЕКТ (логично, да?), выбрать "из системы контроля версий", дальше все интуитивно.
Добрый вечер!
Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:
Приложение остановлено, так как оно получило сигнал от операционной системы.
Сигнал: SIGSEGV
Назначение: Segmentation fault.
При этом в VS2005 все нормально в режиме отладки.
В чем может быть причина?
Здравствуйте, Аноним, Вы писали:
А>Добрый вечер!
А>Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:
А>Приложение остановлено, так как оно получило сигнал от операционной системы.
А>Сигнал: SIGSEGV
А>Назначение: Segmentation fault.
А>При этом в VS2005 все нормально в режиме отладки.
А>В чем может быть причина?
Сегфолт любит вылазить при проблемах с подключаемыми dll (проверьте версии самих qt-библиотек и MSVCRT). А вообще, можно попробовать детальнее посмотреть дебаггером место сегфолта.
Здравствуйте, Аноним, Вы писали:
А>Добрый вечер!
А>Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:
А>Приложение остановлено, так как оно получило сигнал от операционной системы.
А>Сигнал: SIGSEGV
А>Назначение: Segmentation fault.
Ошибка сегментации (англ. Segmentation fault или сокращённо segfault) — ошибка программного обеспечения, возникающая при попытке обращения к недоступным для записи участкам памяти либо при попытке изменения памяти запрещённым способом.
А>При этом в VS2005 все нормально в режиме отладки.
Без разницы, если сборка официальная (например, с mingw), значит дело в программе. VS 2005 очень лояльна в этом плане, многое не запрещает, но это не значит, что программа написана правильно.
А>В чем может быть причина?
Мало информации, по аналогии "А у меня автомобиль не ездит, в чём может быть причина?"
Здравствуйте, velkin & romankr, Вы писали:
Хочу сразу сказать — приложение отлично работает собранное как в vs2005, так и в mingw. Точку останова ставлю сразу на первой строке в main. Я просто не пойму если ошибка сегментации — так программа вообще не должна работать!
V>Сегфолт любит вылазить при проблемах с подключаемыми dll (проверьте версии самих qt-библиотек и MSVCRT). А вообще, можно попробовать детальнее посмотреть дебаггером место сегфолта.
dll-не использую, "чистый" проект с++, слинковано с 5 стат.библиотеками, которые в свою очередь, также собраны mingw.
читал — бегло ничего подобного нет.
А>>При этом в VS2005 все нормально в режиме отладки.
V>Без разницы, если сборка официальная (например, с mingw), значит дело в программе. VS 2005 очень лояльна в этом плане, многое не запрещает, но это не значит, что программа написана правильно.
программа 2-е сутки тестируется, лопатит тонну информации — без сбоев, а я ее в отладочной версии даже запустить не могу!
V>Мало информации, по аналогии "А у меня автомобиль не ездит, в чём может быть причина?"
так я и не могу трассировку запустить!
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, velkin & romankr, Вы писали:
А>Хочу сразу сказать — приложение отлично работает собранное как в vs2005, так и в mingw. Точку останова ставлю сразу на первой строке в main. Я просто не пойму если ошибка сегментации — так программа вообще не должна работать!
Почему не должна, в некоторых случаях очень даже должна.
А>dll-не использую, "чистый" проект с++, слинковано с 5 стат.библиотеками, которые в свою очередь, также собраны mingw.
Здравствуйте, Аноним, Вы писали:
А>так я и не могу трассировку запустить!
Ещё вспомнил, если не можешь запустить режим отладки, тогда последовательно отключай библиотеки и код их использующий. Или наоборот, проверь, вылетает ли у тебя чистый Qt в режиме отладки или нет, а потом добавляй библиотеки. Всё равно надо как-то определить на каком этапе происходит segfault.
Здравствуйте, Аноним, Вы писали:
А>Добрый вечер!
А>Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:
А>Приложение остановлено, так как оно получило сигнал от операционной системы.
А>Сигнал: SIGSEGV
А>Назначение: Segmentation fault.
А>При этом в VS2005 все нормально в режиме отладки.
А>В чем может быть причина?
. HsMgr.exe (32-bit) and HsMgr64.exe (64-bit) are services which provide the GX2.0 features. Under Vista, they also enable Direct sound 2D/3D/EAX for applications. So it is essential to have them running on your system. On older drivers, these files were named [CMGxMon.exe] and [CMGxMon64.exe]. Windows Vista tends to block some .EXE or .DLL files in ZIP files for security issues. This may cause program to stop responding, or Windows Vista may prompt you for permission to run these programs during boot up.
Под WinXP у меня Qt подобным образом отваливался из-за нового BitDefender'а, пришлось его снести. Думаю список нежелательных программ этим не ограничивается.
Я ниже по постам задавал вопрос, о том что программа вылетает и бла-бла-бла. Так вот. Скомпилировал я значит эту программу под линуксом, подключаю устройство (модуль Modbus Slave). Захожу в графики, и начинаю с ними играть. И вот уже 45 000 пакетов и программа не вылетает. Никаких помех, код работает как часы. А под виндой, если двигать графики, сразу "Прекращена работы программы "бла бла бла"" Вот почему так? Под линуксом хорошо, а под виндой такие дела?
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Подписчики
Потому, что любая кроссплатформенная библиотека подразумевает несколько бэкендов, которые выбираются настройками проекта при компилировании программы (так называемый Pimpl, использование Private API). Степень качества работы конкретного бэкенда будет естественно зависеть от профессиональных навыков разработчика, который занимается развитием данного бэкенда. Также на качество работы влияет API самой операционной системы.
Скриншот, который Вы привели, абсолютно ничего не говорит о специфике проблемы, кроме того, что проблема имеется.
Разработка бэкендов для кросплатформенной библиотеки естественно зачастую ведётся несколькими разработчиками, у каждого из которых свой собственный профиль: WinAPI, X11, MAC OS API, что характерно для крупных проектов, поскольку трудно быть Гуру во всех трёх направлениях одновременно, тем не менее уровень навыков специалистов будет различен по отношению к целевым API. То есть над WinAPI может работать специалист уровня Team Lead, а над X11 специалист уровня Middle.
Также проблемы могут создавать сами API Операционной Системы. Например, написать Key Logger для Windows на мой взгляд проще, чем для Linux, просто потому, что под Windows есть заточенное под это API, так называемые Хуки, а под Linux такого нет, хотя имеется возможность захвата событий клавиатуры, но их потом ещё нужно правильно вернуть обратно в систему, что требует несколько больших навыков и знаний, чем при работе с WinAPI.
А ещё проблемы может создавать компилятор )))) Было одно обсуждение, в котором обсуждалась утечка памяти при работе с WinAPI ICMP Ping, как выяснилось через пару недель, проблему создавал компилятор. Тот же самый код при сборке другим компилятором работал без утечек памяти при выполнении функций из WinAPI.
Вывод: Причин такого поведения может быть множество.
Решение: Использовать другие библиотеки, пробовать другие средства сборки, искать обходные пути (то есть костылировать проблему).
Репутация: нет
Всего: нет
Не работает так, как сделала:
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
Написано: You must first delete the existing layout manager (returned by layout()) before you can call setLayout() with the new layout.
Хорошо, но как?
В примере это не показано:
То же самое делается и у меня в программе
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
bsa: В первую очередь вы должны удалить существующий лэйаут ( возвращаемый layout()) прежде чем вы сможете вызвать setLayout() с новым лэйаутом.
Т.е. я так понимаю lyaout() вернет то, что сейчас активно и этот лэйаут надо удалить. Но покажите мне где написано, каким образом удалять? Или я тупая? Я только знакомлюсь с Qt, соответственно много еще не знаю
Добавлено через 6 минут и 2 секунды
bsa,
Репутация: нет
Всего: нет
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
ничего не возвращает и в окне ,где показываются величины, пишет, что <no such value>
Если я напрямую ставлю
то тоже не работает.
Дело в том, что компановка только для 3-х элементов ( у меня это Label, EditText , ComboBox), компановки на основном окне нет.
Добавлено через 3 минуты и 45 секунд
bsa, да выполняются, там нечему выполняться
Сильно не смеяться, вот с этим я пытаюсь эксперементировать:
bool flHorizont = true;
QVBoxLayout *layoutV;
На форме 3 элемента, про которые написала выше, объединенные горизонтальной компоновкой, и кнопка лежит отдельно от них
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
но суть то от этого не изменилась?
Репутация: нет
Всего: нет
bsa, всё равно не работает
Во-первых на строке
Убрала это, написала условие через If. Проходит до конца процедуры,а потом выдает всё ранво ошибку:"Приложение остановлено, так как оно получило сигнал от операционной системы"
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
bsa, ну вот здесь сразу падает:
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
bsa, да, я так делала, в этом случае доходит до конца процедуры. Далее отладчик попападает в ассемблеровский код и вот здесь вылетает:
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
а как его смотреть?
Добавлено через 8 минут и 1 секунду
Репутация: нет
Всего: нет
Кстати, вот такой вариат :
Код |
flHorizont = !flHorizont; |
вообще без проблем работает Но я не знаю насколько это правильно. В смыле насколько соответствует заданному заданию.
Репутация: 24
Всего: 196
В принципе, очень интересный способ. В этом случае можно использовать QBoxLayout вместо QHBoxLayout.
Репутация: нет
Всего: нет
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
Репутация: 24
Всего: 196
Репутация: нет
Всего: нет
Репутация: 24
Всего: 196
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.
[ Время генерации скрипта: 0.1851 ] [ Использовано запросов: 21 ] [ GZIP включён ]
SIGSEGV - сигнал, посылаемый процессу при попытке обращения к несуществующей памяти или обращения с нарушением прав доступа (Segmentation Fault).
Данная ошибка может возникать при попытке обратиться к методу или члену по невалидному указателю, или при попытке обратиться к чужой области памяти.
К ошибке доступа памяти SIGSEGV могут привести следующие примеры кода:
Главной неприятностью этих ошибок является то, что программа может молча упасть, и вам будет не понятна причина падения, можно даже не заметить падение (В моём случае падал консольный тест, выполнялись не все тесты, но слов об ошибке не было), либо в виндовс ошибка может вызвать аварийное завершение вашего приложения вида
Кстати, помимо ошибки доступа памяти (при работе с указателями), можно получить и ошибку математических вычислений. Такая ошибка сопровождается приходом сигнала SIGFPE. Самый простой пример - это деление на нуль:
В этом случае также можно получить молчаливое или аварийное завершение программы. (Молчаливое завершение намного хуже, т.к. вы можете его попросту не заметить и ничего об этом не узнать).
Как сделать так, чтобы программа не завершалась молча?
Как перехватить ошибку доступа к памяти?
Как перехватить деление на ноль?
Ответ далее.
Для этого надо перехватить сигналы SIGSEGV, SIGFPE. (Кстати, не все сигналы могут быть перехвачены, более подробную информацию можно найти в соответствующей справке по функции signal).
За основу следующего примера был взят пример с "Обработка Segmentation Fault в C++".
Перехват сигналов SIGSEGV, SIGFPE в C++:
Внимание: в документации описан перечень безопасных функций, которые можно безопасно вызвать из обработчика сигнала SIGSEGV. Также не следует продолжать выполнять какие-то критические действия, т.к. память уже повреждена (какие именно повреждения - неизвестно).
Пример я компилировал в Qt Creator под операционной системой Windows, и он работал, ошибки отлавливались. Спасибо хабра-форуму, который подсказал решение этой проблемы. В результате работы примера, при возникновении ошибок, будут всплывать диалоговые окна, оповещающие об ошибке.
Для перехвата исключения деления на ноль, можно использовать технологию SEH, но возможно она работает только для Windows. И она также может перехватить не все сигналы.
Читайте также: