Здравствуйте, 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...