Название: обработка сигнала об ошибке... Отправлено: west от Май 11, 2005, 11:31 Как правильно завершить обработку сигнала об ошибке, например SIGSEGV? Т.е. приложение на каком-то из этапов выдает подобное сообщение, я его перехватываю - что сделать дальше, как отменить выполняющуюся операцию (к примеру выделение памяти) ? Хочется выдать сообщение пользователю типа "ошибка по адресу ........" и вернуть комплекс в исходное состояние. Разработку веду на С++ под Qt 2.3.0, там обработок исключительных ситуаций нет.
Название: обработка сигнала об ошибке... Отправлено: Sergeich от Май 11, 2005, 14:10 man 2 signal; man 7 signal; man 2 sigaction
Название: обработка сигнала об ошибке... Отправлено: Hellenna от Май 11, 2005, 19:37 Примерно так:
Код: sig_atomic_t sigusr1_count=0; Название: обработка сигнала об ошибке... Отправлено: west от Май 14, 2005, 10:31 я в своем приложении тестирую чужие dll, исходников их у меня нет, только описание входных и выходных параметров. dll запускаю все в отдельных потоках, класс запуска dll мой, наследован от QThread. Если dll валится, удается только поймать SIGSEGV в main моей программы. Причем в обработчике сигнала об ошибке, как было предложено Hellenna, никаких действий выполнить не удается, так как он начинает вызываться постоянно. Впечатление что система генерит бесконечно этот сигнал об ошибке. Да и в документации написано что обработчики сигналов должны быть короткими. Если запускать dll через отдельный процесс, типа использовать fork() и execvp(), тогда можно поймать завершение дочернего процесса, но очень тяжело обмениваться с dll данными во время ее выполнения, короче такой вариант для меня не подходит. Чего делать-то?
Название: обработка сигнала об ошибке... Отправлено: Sergeich от Май 14, 2005, 11:04 Если dll-ка будет сидеть в адресном пространстве твоего приложения, то никакая обработка сигналов тебе не поможет. Так что едиственное безопасное решение - порождать другой процесс, и запускать dll в нем. А для обмена данными пожно попробовать юзать шаренную память.
|