Название: А есть ли смысл??? SIGSEGV SIGFPE и т.д. Отправлено: west от Июнь 29, 2006, 15:16 Простите меня неуча, но никак не могу разобраться с сигналами в UNIX OC. Дело в том, что максимум чего полезного могу получить от них, так это квитанцию о смерте проги за один шаг до оной. Перехват сигналов понятен, но как вернуться в точку ошибки (а еще лучше за шаг до нее!), раскрутить стек и выполнить обходной маневр, не залазя в критическую секцию. Все что касается блоков try catch не очень подходит, т.к. это исключительные ситуации языка, т.е. new [-2] оно поймает, а 10/0 - нет. Неужели никто не сталкивался с такой проблемой, и не пытался обработь искл. ситуацию через сигналы? Ведь они похоже и сделаны для этого. Прокатил у меня правда вариант с функциями setjmp() и longjmp(), но он удобен только для однопоточного приложения. Да, кстати, о задачи. Пускаю н-ое количество мат. расчетов в so-шках, библиотеки не мои, каждый раз разные. Для каждой организую свой поток. Попадется корявая, может зависнуть до ста пользователей, будут ждать, пока сервер перегрузится. И не могу я для каждой библы использовать свое адресное пространство! Умрет система при обмене данных. Хотя, наверное , это уже вопрос отдельного топика.
Резюме задачи (простите еще раз за эмоции, которые были выше), работает серверное приложение, у которого порядка 250 математических библиотек, состав которых меняется. Клиенты цепляются на сервер, по сети вливают свои данные и начинают применять к ним всю подряд математику. Из-за недопонимания процесса частенько используют не то или не к тому, что, собственно и ведет к завалу комплекса в целом. Как сделать так, чтобы если мат.библ. споткнулась на вычислениях, это не приводило к завершению работы сервера. Пока о том, что что-то где-то не так я узнаю только по сигналам. Название: А есть ли смысл??? SIGSEGV SIGFPE и т.д. Отправлено: yurror от Февраль 16, 2007, 12:34 SIGSEGV ловить? хм...
на freebsd был примерчик... Код:
Код:
В линуксе валится сразу после возбуждения исключения. идей что к чему пока нет. добавлено спустя 2 часа 16 минут: Для Linux получилось только так... изврат дикий... try.h Код:
try.cc Код:
sample.cc Код: #include <iostream> добавлено спустя 2 минуты: Код:
Название: А есть ли смысл??? SIGSEGV SIGFPE и т.д. Отправлено: yurror от Март 02, 2007, 04:02 Сегодня заупустил программульку в Wine а она возьми да и выдай окошко Access Violation тост-боси... так что это 1) возможно 2) сделано. Надо будет расковырять исходники wine.
|