mpd

Вопрос: Как дела с catch(...) в MS?

Aug 16, 2011 12:38

Думаю, многие из вас в курсе, что в NPTL механизм pthread_cancel() реализован с помощью исключений. Таким образом, следует избегать нейтрализации catch(...).

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

Заранее благодарен! :-)

Update: Обратные ссылки: Read more... )

freesoftware, c++, linux, concurrency, ms windows, library, posix, plain c, gcc

Leave a comment

Comments 28

(The comment has been removed)

Re: Нету mpd August 16 2011, 09:38:39 UTC
Спасибо!

Reply


rezdm August 16 2011, 09:16:40 UTC
Я бы на всякий случай взглянул бы в SEH. Для очистки совести.

Reply

Re: Я бы на всякий случай взглянул бы в SEH. Для очистки со mpd August 16 2011, 09:42:38 UTC
Насколько я понял, Microsoft-specific exception handling mechanisms - даже синтаксис другой имеют.

Но если таки очистишь совесть - дай знать! ;-)

Reply

Re: Я бы на всякий случай взглянул бы в SEH. Для очистки со rezdm August 16 2011, 09:50:21 UTC
http://msdn.microsoft.com/en-us/library/ms686717%28v=vs.85%29.aspx

API c-шный, потому никаких try/catch, как можно догадаться.

В чём мегабяка такого шатдауна — если тред держит какойнить критикл_секшн (может и не сам, может где в кишках сторонней билибитеки или самого вантуза). Ну и ваще шатдаунить надо корректно.

Reply

Re: Я бы на всякий случай взглянул бы в SEH. Для очистки со mpd August 16 2011, 09:58:50 UTC
У меня лично, как у разработчика библиотеки, не стоит потребность обработки каких-нибудь ресурсов, правильной обработки прерывания выполнения потока, нет.

Мне нужно обеспечить недопустимость вырывания наружу исключений за plain-C интерфейс. Из поста следует, что не все исключения я должен гасить, но это - в среде Линукса.

Reply


vaddimka August 16 2011, 11:12:52 UTC
за catch( ... ) без rethrow вообще надо убивать
или хотя бы гнать ссаными тряпками :)
потому что если где-то что-то сегфолтится и нейтрализуется этим кэтчем, то узнаешь ты об этом как правило слишком поздно

Reply

Re: за catch( ... ) без rethrow вообще надо убивать mpd August 16 2011, 11:22:49 UTC
Согласен. Я и сам - не любитель. Но это не от хорошей жизни...

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

Да, есть некоторый набор исключений самой библиотеки.
Но она использует, например, STL.

Reply

vaddimka August 16 2011, 12:13:07 UTC
а в чем проблема? все исключения STL унаследованы от std::exception
делаешь catch( std::exception& e ) и все
можешь даже после этого в сишный интерфейс какую-нибудь строковую ошибку вернуть (по e.what() выдастся const char *

Reply

Re: в чем проблема? все исключения STL унаследованы от std::e mpd August 16 2011, 14:44:06 UTC
Bingo!

Спасибо!

Reply


al_zatv August 24 2011, 18:56:35 UTC
а я даже не понял вопроса:) но,уверен, что в конце концов всё будет хорошо:)

Reply

Re: а я даже не понял вопроса:) но,уверен, что в конце конц mpd August 24 2011, 19:21:09 UTC
Смысл в том, что если ты отлавливаешь исключения с помощью catch(...) и дальше их не пробрасываешь, а игнорируешь, то ты можешь оказаться очень даже неправым...

Как сам-то?
Доволен работой в результате?

Reply

Re: а я даже не понял вопроса:) но,уверен, что в конце конц al_zatv October 16 2011, 22:12:10 UTC
Ага,доволен. Есть где раскинуть извилинами:) Интересно. Даже на жж забил:)
Сорри что не сразу ответил, твой комментарий потерялся)

Reply

Re: а я даже не понял вопроса:) но,уверен, что в конце конц mpd October 17 2011, 06:50:16 UTC
Ну и замечательно! :-)
И не стоит волноваться, я вполне понимаю...

А на ЖЖ - я и сам забиваю...
Хотя, конечно, на активность - отвечаю активностью!
(в смысле, если уж комментарии есть - как минимум просматриваю)

Reply


Leave a comment

Up