Re: Первый взгляд на SObjectizer 5
От: zaufi Земля  
Дата: 23.09.08 14:09
Оценка: 32 (4)
Здравствуйте, eao197, Вы писали:

E>Приглашаю к обсуждению всех, кто интересуется событийно-ориентированным и/или агентно-ориентированным программированием вообще и SObjectizer-ом в частности. А так же тех, кто пытался, пытается или только еще хочет попытаться создать собственный событийно-ориентированный фреймворк. Хотя бы в порядке обмена опытом.


по поводу отсутствия трэйсов в исключениях:
давно пользую классик (исходники приводил здесь
Автор: zaufi
Дата: 02.04.08
) для получения backtrace. давно ждал когда бустеры аппрувнут boost:exception... в 1.36 это наконец случилось. выкинул некоторые свои велосипеды и сделал себе следующее:

namespace example {

class exception : public std::exception, public boost::exception
{
public:
    /// Type of attached to exception backtrace data
    typedef boost::error_info<struct tag_backtrace, debug::backtrace> trace_info;
    /// Default constructor push backtrace info
    exception()
    {
        *this << trace_info(debug::backtrace());
    }
    ~exception() throw()
    {
    }
    template <typename T>
    boost::shared_ptr<const typename T::value_type> get() const
    {
        return boost::get_error_info<T>(*this);
    }
    boost::shared_ptr<const debug::backtrace> trace() const
    {
        return get<trace_info>();
    }
    /// default implementation for \c what()
    char const* what() const throw()
    {
        return boost::exception::diagnostic_information();
    }
};

}                                                          // namespace example


пример использования:
namespace my {

struct exception : public example::exception {};

}                                                          // namespace my

void foo()
{
    throw my::exception();
}

MY_AUTO_TEST_CASE(exception_test)
{
    try
    {
        foo();
    }
    catch (const my::exception& e)
    {
        // print backtrace to std error device
        std::cerr << *e.trace() << std::endl;
    }
}


наследую классы исключений от базового и в каждом имею backtrace который при соответствующем debug/verbose level'e можно распечатать...
насколько я понял по обсуждениям из ветки где опубликовал сорцы backtrace в винде тоже можно получить stack trace...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.