Обработка ошибок С++ кодом [GCC/MinGW]

Тема в разделе "LANGS.C", создана пользователем Rel, 24 окт 2011.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    собираю многие проекты с флагом -nostdlib... в качестве системы отлавливания и обработки ошибок использовал такую схему: в каждую функцию или метод класса последним необязательным параметром передавался указатель на буфер информации об ошибке (код ошибки, строка исходного кода, на которой произошла ошибка, последовательность вызовов функций, которая привела к ошибке)... внутри функции использовалась реализация методики, которая на тот момент была кандидатом для включения в библиотеку Boost... а именно в начале функции на стеке инициализировался объект-контроллер ошибки, в конструкторе он обнулял информацию об ошибке и добавлял идентификатор функции в список вызовов... в деструкторе, если в функции не происходила ошибка, то из списка удалялась функция, в противном случае - нет... в принципе это хорошая схема, но...

    мне хочется изолировать код обработки ошибок от основного функционала... в этом мне могли бы помочь исключения, но тут есть две проблемы... первая, если использовать стандартные исключения (SjLj), то как подключить необходимые для их реализации функции без подключения всего остального рантайма? вторая заключается в том, что судя по исходникам, там довольно много кода... таким образом мы приходим к выводу, что если хочется использовать исключения, то нужно реализовать их самому... собственно вопрос в том, позволят ли исключения в принципе реализовать такую расширенную информацию об ошибках, как мой старый метод? есть ли статьи или реализации исключений меньшим количеством кода, чем в исходниках gcc/mingw, в чем их плюсы/минусы? чем отличаются обработчики SjLj от Dwarf-2 и других? если кому-нить так же интересна данная тематика, с удовольствием пообсуждаю с вами... заранее спасибо!

    ЗЫ ситуация усугубляется тем, что необходимо реализовывать поддержку windows/linux и x86/x64...
    ЗЗЫ интересуют только "софтварные" исключения, SEH/VEH безусловно интересены, но пока не до них, тем более, что они существуют только в винде...
    ЗЗЗЫ если есть какие-либо альтернативные способы обработки ошибок (с изоляцией обработки ошибок от основного функционала), с удовольствием послушаю о них...