Loading...
Searching...
No Matches
Dune::ExceptionHook Struct Referenceabstract
Common » Exception handling

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

`#include <dune/common/exceptions.hh>`

## 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);
}
}
};
Dune::ExceptionHook::operator()
virtual void operator()()=0
Dune::ExceptionHook
Base class to add a hook to the Dune::Exception.
Definition exceptions.hh:176

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;
}
}
main
int main(int argc, char **argv)
Definition mpi_collective_benchmark.cc:297
Dune::Exception::registerHook
static void registerHook(ExceptionHook *hook)
add a functor which is called before a Dune::Exception is emitted (see Dune::ExceptionHook)
Definition exceptions.cc:22
Dune::Exception::what
const char * what() const noexcept override
output internal message buffer
Definition exceptions.cc:37
Dune::Exception
Base class for Dune-Exceptions.
Definition exceptions.hh:98
Dune::MPIHelper
A real mpi helper.
Definition mpihelper.hh:169
Dune::MPIHelper::instance
static DUNE_EXPORT MPIHelper & instance(int &argc, char **&argv)
Get the singleton instance of the helper.
Definition mpihelper.hh:228
Dune::MPIHelper::rank
int rank() const
return rank of process
Definition mpihelper.hh:270

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

- exceptions.hh