Dune::ExceptionHook Struct Reference
[Exception handling]

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:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 25 Mar 2018 for dune-common by  doxygen 1.6.1