Механизм обработки исключений в Solaris - PullRequest
0 голосов
/ 09 сентября 2011

Я создаю механизм обработки ошибок для приложения C ++.Прямо сейчас я выполнил часть окон, используя VectoredExceptionHandling, и я хотел знать, есть ли подобная концепция в Solaris.По сути, всякий раз, когда в программе выдается исключение, я хочу вызвать обратный вызов.В Windows вы можете зарегистрировать обратный вызов, используя AddVectoredExceptionHandler().Как мне сделать это для Solaris?

1 Ответ

1 голос
/ 09 сентября 2011

Не 100%, если это сработает, но вы можете попытаться имитировать работу точек захвата GDB: см. http://www.delorie.com/gnu/docs/gdb/gdb_31.html Ключевая информация - это:

"Чтобы остановить непосредственно перед вызовом обработчика исключений, вам необходимо знать о реализации. В случае GNU C ++ исключения вызываются путем вызова библиотечной функции с именем __raise_exception, которая имеет следующий интерфейс ANSI C:

/* addr is where the exception identifier is stored.
   id is the exception identifier.  */
void __raise_exception (void **addr, void *id);

Чтобы отладчик перехватывал все исключения до того, как произойдет раскрутка стека, установите точку останова на __raise_exception "

Итак, я предполагаю, что вы можете установить собственное исключение __raise_exception, например, с помощью трюка LD_PRELOAD.

...