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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: GPF и другие исключения в потоках  (Прочитано 2609 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Январь 25, 2012, 14:35 »

В приложении возникла необходимость собственной расширенной обработки GPF ака SIGSEGV и других "низкоуровневых" критических исключений. Приложение управляет аппаратурой, которую при таких исключениях надо корректно выключить. Кроме этого, завершение работы приложения при GPF в модуле управления аппаратурой не обязательно - этот модуль является динамически загруженной библиотекой, и его можно попытаться выгрузить, и загрузить заново. С другими частями приложения он общается только через сигналы. То есть, GPF в нем изолированы, и не влияют на остальные части приложения. Пока не удалось определить точно из-за чего возникает GPF, поскольку это происходит очень редко, и явно связано с входными данными от аппаратуры. При каком-то определенном наборе входных данных что-то происходит неправильно. Имитировать не удается. Поэтому надо отлавливать GPF, еще чтобы разобраться, почему падает. Но GPF возникает в отдельной QThread, которая занимается работой с аппаратурой. И таких QThread может быть несколько...

Вот тут теперь вопрос - если GPF в QThread, как лучше с ним поступить? Первая мысль - в самом начале этого потока сделать try, и ловить catch исключение в этом же потоке. Но так получается пока не очень красиво, из-за особенностей реализации. А try перед стартом потока представляется не корректным - в catch мы вывалимся с неправильным контекстом процесса. Или же такая ситуация предусмотрена где-то в недрах QThread, и всё будет нормально?
« Последнее редактирование: Январь 25, 2012, 14:43 от Гурман » Записан

2^7-1 == 127, задумайтесь...
SimpleSunny
Гость
« Ответ #1 : Январь 25, 2012, 23:52 »

Почему бы не анализировать core dump после необработанного падения?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Январь 26, 2012, 11:10 »

чево???... при чём тут core dump?  Шокированный еще раз - приложение не должно упасть из-за GPF в отдельном модуле, оно должно что-то сделать, и попытаться восстановить работоспособность модуля
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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