The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

try - catch не ловит exeptions, node (?), 13-Окт-05, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


5. "try - catch не ловит exeptions"  +/
Сообщение от butcher (ok), 13-Окт-05, 16:00 
>В чем я не прав и почему так получается?

Буквально недавно попадалось на глаза сообщение, прочтите:
http://gzip.rsdn.ru/forum/Message.aspx?mid=1421018&only=1

Ответить | Правка | Наверх | Cообщить модератору

6. "try - catch не ловит exeptions"  +/
Сообщение от node (?), 13-Окт-05, 17:42 
>>В чем я не прав и почему так получается?
>
>Буквально недавно попадалось на глаза сообщение, прочтите:
>http://gzip.rsdn.ru/forum/Message.aspx?mid=1421018&only=1


ага, понятно, спасибо всем за советы!

только вот почему все пишут, что перехватывать сигнал, это порочная практика или это бесполезно?

я вот написал перехватчик и все нормально, екзепшн ловит на сигнал SIGSEGV, я там обработать могу, в конце концов, к примеру, закрыть открытые дискрипторы файлов или сокетов...
только почему все говорят, что так не очень хорошо?
есть какие то скрытые проблеммы?

и еще вопрос, если так в Юниксах работают странно catch, то как пишут тогда вообще нормально программы под Юниксы?
Извините за вопрос, просто писал много под Винды и вообщем хорошим тоном считается try catch использовать, т.к. может произойти что угодно, особенно если проект огромный и работает круглые сутки и в котором не хотелось бы , чтоб вываливалась прога с диким криком, а хотелось бы чтоб хотя бы закрывалась корректно если что...

спасибо заранее за ответы

Ответить | Правка | Наверх | Cообщить модератору

7. "try - catch не ловит exeptions"  +/
Сообщение от jd (??), 13-Окт-05, 21:05 
>только вот почему все пишут, что перехватывать сигнал, это порочная практика или
>это бесполезно?

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


>и еще вопрос, если так в Юниксах работают странно catch, то как пишут тогда вообще нормально программы под Юниксы?

Вероятно, проверяют границы массивов, не используют потенциально опасных функций вроде strcpy где не надо, проверяют возвращаемые значения... Короче, делают всё, что положено, а как без этого? И Юникс тут не при чём.
И ничего странного в такой работе try/catch я не вижу. Просто они IMHO не для этого.

Ответить | Правка | Наверх | Cообщить модератору

8. "try - catch не ловит exeptions"  +/
Сообщение от elvenic (??), 13-Окт-05, 23:57 
>>>В чем я не прав и почему так получается?
>>
>>Буквально недавно попадалось на глаза сообщение, прочтите:
>>http://gzip.rsdn.ru/forum/Message.aspx?mid=1421018&only=1
>
>
>ага, понятно, спасибо всем за советы!
>
>только вот почему все пишут, что перехватывать сигнал, это порочная практика или
>это бесполезно?

Потому что после SIGSEGV-а состояние программы не определено - какая-то инструкция процессора не завершилась как положено.

>
>я вот написал перехватчик и все нормально, екзепшн ловит на сигнал SIGSEGV,
>я там обработать могу, в конце концов, к примеру, закрыть открытые
>дискрипторы файлов или сокетов...

Вот только попытка корректного выхода из программы и есть единсвенно возможное правильное действие. (Попытка, поскольку после SISEGVа программа ужв битая). Дескрипторы ОС сама закрывает - поэтому иногда самое лучшее решение просто позволить ей самой умереть без какой либо обработки сигнала.

>только почему все говорят, что так не очень хорошо?
>есть какие то скрытые проблеммы?
>
>и еще вопрос, если так в Юниксах работают странно catch, то как
>пишут тогда вообще нормально программы под Юниксы?
>Извините за вопрос, просто писал много под Винды и вообщем хорошим тоном
>считается try catch использовать, т.к. может произойти что угодно, особенно если
>проект огромный и работает круглые сутки и в котором не хотелось
>бы , чтоб вываливалась прога с диким криком, а хотелось бы
>чтоб хотя бы закрывалась корректно если что...

Программы надо писать так чтобы SIGSEGV-ы не случались. Если случилось - это все, конец, застрелись и умри. Если в программе "может произойти что угодно" - надо это "что угодно" предусмотреть и обработать как следует, не дожидаясь SIGSEGVа...

Точно так же как не стоит использовать exception для проверки и выхода из цикла по достижению конца массива, не надо для этого и SIGSEGV использовать.

А вообще, сигналы в Unix настолько же фундаментальны, как и message dispatch в windows gui. Надежные сервера обязательно перехватывают и корректно обрабатывают некоторые сигналы - SIGINT, SIGTERM, SIGCHILD если запускаются дочерние процессы, SIGPIPE если работают с сокетами... Это все стоит сначала хорошо  изучить, а потом и посмотреть как на все это наложить семантику конкретного языка - C++ exceptions, например...


Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

9. "try - catch не ловит exeptions"  +/
Сообщение от dilnab (??), 05-Май-09, 11:56 
>[оверквотинг удален]
>Точно так же как не стоит использовать exception для проверки и выхода
>из цикла по достижению конца массива, не надо для этого и
>SIGSEGV использовать.
>
>А вообще, сигналы в Unix настолько же фундаментальны, как и message dispatch
>в windows gui. Надежные сервера обязательно перехватывают и корректно обрабатывают некоторые
>сигналы - SIGINT, SIGTERM, SIGCHILD если запускаются дочерние процессы, SIGPIPE если
>работают с сокетами... Это все стоит сначала хорошо  изучить, а
>потом и посмотреть как на все это наложить семантику конкретного языка
>- C++ exceptions, например...

Конечно в большом проекте можно упустить выходы за границы, использование неинициализированных указателей ... очень тяжко их находить и легко наступать на одни и те=же грабли.
Подскажите пожалуйста инструмен для Solaris/SUN. Использую компилятор Sunstudio 10.
Valgrind использовал для Linux, но при компиляции с OCI очень много ругается, тож непонятно. В винде помоему хорошая вешь была BoundaryChecker, но для VC7 уже неработает.
И еще в Unix-ах че-то немогу просматривать дамп памяти в точках останова, в винде очень легко и просто.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру