LINUX.ORG.RU

Например, у тебя программа 'cat' - вывод файла на консоль. Ошибка - файл не найден. И как программа должна дальше выполняться?

JackYF ★★★★
()

какой-либо внезапной ошибки программа продолжала выполняться

Выносить код который может вызвать ошибку в отдельный процесс.

Begemoth ★★★★★
()

> при появлении какой-либо внезапной ошибки

какой-либо внезапной ошибки

внезапной ошибки


внезапной



I lol'd.

LamerOk ★★★★★
()

Сегфолт можно перехватить, man signal. Если поставить пустой обработчик, то программа не завершится, а будет нормально продолжать выполнятся. Кстати отличная защита от сегфолтов.

e3d08dff
()
Ответ на: комментарий от e3d08dff

Кстати отличная защита от сегфолтов.

Лучшая защита от сегфолтов - не допускать их. А если уж они происходят, значит что-то в программе не то. Лучше их отловить сразу и исправить, чем позволять им происходить.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от e3d08dff

facepalm.svg

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

dmiceman ★★★★★
()

Ты задал уже достаточно глупых вопросов.
Иди, наконец, почитай книжки.

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

anonymous
()
Ответ на: комментарий от LamerOk

>I lol'd

Смейся, смейся, LamerOk. ^_^

Siado ★★★★★
() автор топика
Ответ на: комментарий от JackYF

>Например, у тебя программа 'cat' - вывод файла на консоль. Ошибка - файл не найден. И как программа должна дальше выполняться?

Ну я таки не про столь откровенную, а про ту, когда дополнительный модуль выдает подобное. Например когда считываешь те же файлы, из списка значений целочисленно типа и там внезапно кто-то влепил какую-то надпись а это никто явно не предусмотрел. А вместо этого замутил простой try catch. Ну это как бы примитивный случай.

Siado ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>По твоему сабжу - пиши программы без внезапных ошибок

Купи слона. Мой сабж про все непредусмотренное.

Siado ★★★★★
() автор топика
Ответ на: комментарий от Begemoth

>Выносить код который может вызвать ошибку в отдельный процесс

Хмм, ну к стате да, про многопоточность не пробовал, надо протестировать что случится с отдельным процессом, если в нем замутить функцию с делением на нуль

Siado ★★★★★
() автор топика
Ответ на: комментарий от e3d08dff

> Сегфолт можно перехватить, man signal. Если поставить пустой обработчик, то программа не завершится, а будет нормально продолжать выполнятся. Кстати отличная защита от сегфолтов.

А еще феерично выходит, когда SIGSEGV хендлер тоже кидает сигфолт ! :)

a0
()
Ответ на: комментарий от Siado

> Купи слона. Мой сабж про все непредусмотренное.

Сам покупай, он тебе про то, что надо код правильно проектировать, что-бы непредусмотренное было в принципе невозможно.

Если пользуешься exception-ами - пользуйся на 100%, указывая везде и всюду, в обьявлениях методов, какие эксепшены они могут кинуть, а если никаких - указывай что никакие не кидают.

Далее компилер сам тебе паяльник в зад вставит, если будешь кидать эксепшн там, где такой эксепшн не ловится явно тут-же, или где этот эксепшн не разрешен для выпуска «наружу».

a0
()
Ответ на: комментарий от a0

Далее компилер сам тебе паяльник в зад вставит, если будешь кидать эксепшн там, где такой эксепшн не ловится явно тут-же, или где этот эксепшн не разрешен для выпуска «наружу».

Это в С++-то?

Begemoth ★★★★★
()
Ответ на: комментарий от kemm

Ну значит топикстартеру в голове надо держать уметь все, что может случится ;)

a0
()
Ответ на: комментарий от a0

>Если пользуешься exception-ами - пользуйся на 100%, указывая везде и всюду, в обьявлениях методов, какие эксепшены они могут кинуть, а если никаких - указывай что никакие не кидают.

Ну обработай мне деление на нуль эксепшеном так, что бы программа продолжала выполняться дальше. Коли не шутишь.

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

>Ну обработай мне деление на нуль эксепшеном так, что бы программа продолжала выполняться дальше. Коли не шутишь.
Почему нет? Только надо понимать, что непредвиденная ситуация это баг, от которого вряд ли что поможет. Исключения это механизм обработки предвиденных исключительных ситуаций, а не х.з. чего. От непредвиденных, только полностью изолироваться от компонента и вынести его в отдельный процесс.

Booster ★★
()
Ответ на: комментарий от Booster

>От непредвиденных, только полностью изолироваться от компонента и вынести его в отдельный процесс.

То есть что бы сделать так, что бы при срабатывании экспешена код выполнялся повторно, а не сегфолтился - нужно только в отдельный процесс выводить?

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

>То есть что бы сделать так, что бы при срабатывании экспешена код выполнялся повторно, а не сегфолтился
Это только гарантирует, что главный процесс будет жив-здоров. Нет гарантии, что дочерний процесс повторно не накосячит. Хотя в общем случае даже этого нельзя гарантировать, при желании дочерний процесс может прибить родительский. Почему кстати и лучше предоставлять возможность писать плагины на каком-нибудь скриптовом языке, где точно не нахимичишь с памятью.

Booster ★★
()
Ответ на: комментарий от Booster

Ну опять же скриптовые языки понижают производительность.

Мне вот что-то интересно стало как можно сделать эдакий «живучий» код, что бы все было как бы модульно, пока живо ядро - то все остальные компоненты проги при ошибках просто повторно перезапускались. Есть конечно вероятность того что само ядро полетит, но тем не менее.

Т.к. перехожу на плюсы с жавы - там эксепшенами можно много чего добиться.

Siado ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.