dune-common 2.1.1
Public Member Functions
Dune::ExceptionHook Struct Reference

Base class to add a hook to the Dune::Exception. More...

#include <dune/common/exceptions.hh>

List of all members.

Public Member Functions

virtual ~ExceptionHook ()
virtual void operator() ()=0

Detailed Description

Base class to add a hook to the Dune::Exception.

The user can add a functor which should be called before a Dune::Exception is emitted.

Example: attach a debugger to the process, if an exception is thrown

struct ExceptionHookDebugger : public Dune::ExceptionHook
{
    char * process_;
    char * debugger_;
    ExceptionHookDebugger (int argc, char ** argv, std::string debugger)
    {
        process_ = strdup(argv[0]);
        debugger_ = strdup(debugger.c_str());
    }
    virtual void operator () ()
    {
        pid_t pid = getpid();
        pid_t cpid;
        cpid = fork();
        if (cpid == 0) // child
        {
            char * argv[4];
            argv[0] = debugger_;
            argv[1] = process_;
            argv[2] = new char[12];
            snprintf(argv[2], 12, "%i", int(pid));
            argv[3] = 0;
            // execute debugger
            std::cout << process_ << "\n";
            std::cout << argv[0] << " "
                      << argv[1] << " "
                      << argv[2] << std::endl;
            execv(argv[0], argv);
        }
        else // parent
        {
            // send application to sleep
            kill(pid, SIGSTOP);
        }
    }
};

This hook is registered via a static method of Dune::Exception:

int main(int argc, char** argv) {
    Dune::MPIHelper & mpihelper = Dune::MPIHelper::instance(argc,argv);
    ExceptionHookDebugger debugger(argc, argv, "/usr/bin/ddd");
    Dune::Exception::registerHook(& debugger);
    try
    {
        ...
    }
    catch (std::string & s) {
        std::cout << mpihelper.rank() << ": ERROR: " << s << std::endl;
    }
    catch (Dune::Exception & e) {
        std::cout << mpihelper.rank() << ": DUNE ERROR: " << e.what() << std::endl;
    }
}

Constructor & Destructor Documentation

virtual Dune::ExceptionHook::~ExceptionHook ( ) [inline, virtual]

The documentation for this struct was generated from the following file: