Исключения, детали
От: riffmaster  
Дата: 03.12.09 15:29
Оценка:
Здравствуйте!

Есть такие вопросы по исключениям в с++ :

Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.
Как исключение из вложенной функции ловится её вызывающей функцией ? что при этом происходит со стеком ?
Re: Исключения, детали
От: blackhearted Украина  
Дата: 03.12.09 15:38
Оценка:
Здравствуйте, riffmaster, Вы писали:

R>Здравствуйте!


R>Есть такие вопросы по исключениям в с++ :


что при этом происходит со стеком ?

происходит его раскрутка. здесь
Re: Исключения, детали
От: coba  
Дата: 03.12.09 16:18
Оценка:
Здравствуйте, riffmaster, Вы писали:

R>Здравствуйте!


R>Есть такие вопросы по исключениям в с++ :


R>Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.

R>Как исключение из вложенной функции ловится её вызывающей функцией ? что при этом происходит со стеком ?

какой компилятор и операционная система? под виндой со студией одним образом в никсах и gcc другим... проще говоря сохраняется адрес catch, передается управление обработчику который находит нужный тип исключения и передается управление на нужный catch.
http://agilemanifesto.org/iso/ru/
Re: Исключения, детали
От: McSeem2 США http://www.antigrain.com
Дата: 03.12.09 18:55
Оценка:
Здравствуйте, riffmaster, Вы писали:

R>Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.

R>Как исключение из вложенной функции ловится её вызывающей функцией ? что при этом происходит со стеком ?

Как уже было сказано — раскрутка стека и пришибание объектов. Однако, что будет, если исключение стрельнет в Си-шном call-backе? Например, из функции сравнения qsort? Или из WindowProc? Я слыхал, в GCC должно работать нормально при определенных опциях. Но вообще-то, ничего не гарантировано — то есть UB.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Исключения, детали
От: MasterZiv СССР  
Дата: 03.12.09 20:24
Оценка:
riffmaster wrote:

> Как реализовано бросание исключений на более низком уровне ? ...try,

> throw, catch, finally... — это лишь обертки.

Нет никаких обёрток. Это и есть самый нижний уровень.

> Как исключение из вложенной функции ловится её вызывающей функцией ?


Легко.

что
> при этом происходит со стеком ?

Разматывается. Деструкторы объектов вызываются.
Posted via RSDN NNTP Server 2.1 beta
Re: Исключения, детали
От: andrey.desman  
Дата: 03.12.09 23:58
Оценка: 2 (1)
Здравствуйте, riffmaster, Вы писали:

R>Здравствуйте!


R>Есть такие вопросы по исключениям в с++ :


R>Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.

R>Как исключение из вложенной функции ловится её вызывающей функцией ? что при этом происходит со стеком ?

С асмом дружишь?
Для VC++: How a C++ compiler implements exception handling.
Еще интересная штука: libunwind. Оттуда по ссылке на Itanium C++ ABI: Exception Handling
Re[2]: Исключения, детали
От: riffmaster  
Дата: 04.12.09 10:53
Оценка:
Здравствуйте, coba, Вы писали:

C>Здравствуйте, riffmaster, Вы писали:


R>>Здравствуйте!


R>>Есть такие вопросы по исключениям в с++ :


R>>Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.

R>>Как исключение из вложенной функции ловится её вызывающей функцией ? что при этом происходит со стеком ?

C>какой компилятор и операционная система? под виндой со студией одним образом в никсах и gcc другим... проще говоря сохраняется адрес catch, передается управление обработчику который находит нужный тип исключения и передается управление на нужный catch.


Спасибо, очень даже интересно узнать поподробнее.

Сейчас пользуюсь msvs2005, вскоре может придется делать порт на linux, собственно из-за этого и вопросец возник)

Если можно, то поподробнее, пожалуйста)
Re[2]: Исключения, детали
От: riffmaster  
Дата: 04.12.09 10:55
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Здравствуйте, riffmaster, Вы писали:


R>>Здравствуйте!


R>>Есть такие вопросы по исключениям в с++ :


R>>Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.

R>>Как исключение из вложенной функции ловится её вызывающей функцией ? что при этом происходит со стеком ?

AD>С асмом дружишь?

AD>Для VC++: How a C++ compiler implements exception handling.
AD>Еще интересная штука: libunwind. Оттуда по ссылке на Itanium C++ ABI: Exception Handling

С асмом дружим) Спасибо! Буду разбираться)
Re: Исключения, детали
От: Pavel Dvorkin Россия  
Дата: 04.12.09 11:38
Оценка:
Здравствуйте, riffmaster, Вы писали:

R>Здравствуйте!


R>Есть такие вопросы по исключениям в с++ :


R>Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.


throw — это в Windows вызов RaiseException с пользовательским кодом.
With best regards
Pavel Dvorkin
Re: Исключения, детали
От: alzt  
Дата: 04.12.09 18:54
Оценка:
Здравствуйте, riffmaster, Вы писали:

R>Как реализовано бросание исключений на более низком уровне ? ...try, throw, catch, finally... — это лишь обертки.


На С++ try, throw, catch это и есть самый нижний уровень. Всё что ниже — это уже детали реализации. Они могут отличаться в зависимости от компилятора, платформы и т.д.

finally вообще к языку С++ не относится. Компилятор от Mircrosoft поддерживает эту фичу, но подобный код не будет соответствовать стандарту.
Re[3]: Исключения, детали
От: andrey.desman  
Дата: 04.12.09 20:44
Оценка:
Здравствуйте, riffmaster, Вы писали:

R>Сейчас пользуюсь msvs2005, вскоре может придется делать порт на linux, собственно из-за этого и вопросец возник)

Есть смысл изучать, если просто интересно. Для портирования на линукс тебе это может понадобится только если у тебя там уж совсем грязные низкоуровневые хаки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.