Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
FWCore
Framework
interface
ExceptionHelpers.h
Go to the documentation of this file.
1
#ifndef FWCore_Framework_ExceptionHelpers_h
2
#define FWCore_Framework_ExceptionHelpers_h
3
4
// Original Author: W. David Dagenhart
5
// Created: March 2012
6
7
// These methods should only be used by the Framework
8
// internally!
9
10
// These methods are intended to be used at points
11
// where we catch exceptions earlier than the end
12
// of the "main" function in cmsRun.cpp. The purpose of
13
// of catching them early is to print the useful exception
14
// information before we try cleaning up lumis, runs,
15
// and files by calling functions like endRun. We have
16
// experienced problems that seg faults during the
17
// cleanup caused the primary exception message to be lost.
18
19
// The intent is that printing will be disabled in the
20
// case where there were additional exceptions after
21
// a primary exception and these additional exceptions
22
// where thrown while cleaning up runs, lumis, and files.
23
// The messages from the exceptions after the first tend
24
// to confuse people more than help.
25
26
// At the moment, these functions are called after an
27
// exception occurs in a module's beginRun, beginLumi,
28
// event, endLumi, or endRun methods. And also if
29
// the exception occurs in most of the InputSource virtual
30
// methods. I expect that usage might be extended to other
31
// cases. Note these functions are not needed outside of
32
// the time where the cleanup of runs, lumis and files might
33
// occur. If the process is before or after that period, it
34
// is simpler to let the exceptions should just be allowed
35
// to unwind up the stack into main.
36
37
#include "
FWCore/Utilities/interface/ConvertException.h
"
38
#include "
FWCore/Utilities/interface/Exception.h
"
39
40
#include <exception>
41
#include <functional>
42
#include <string>
43
44
namespace
edm {
45
46
void
addContextAndPrintException
(
char
const
*
context
,
cms::Exception
& ex,
bool
disablePrint);
47
48
template
<
typename
TReturn>
49
TReturn
callWithTryCatchAndPrint
(
std::function
<TReturn(
void
)> iFunc,
50
char
const
*
context
=
nullptr
,
51
bool
disablePrint =
false
) {
52
try
{
53
return
convertException::wrap
([iFunc]() {
return
iFunc(); });
54
}
catch
(
cms::Exception
& ex) {
55
addContextAndPrintException
(
context
, ex, disablePrint);
56
throw
;
57
}
58
return
TReturn();
59
}
60
}
// namespace edm
61
62
#endif
edm::addContextAndPrintException
void addContextAndPrintException(char const *context, cms::Exception &ex, bool disablePrint)
Definition:
ExceptionHelpers.cc:11
callgraph.function
string function
Definition:
callgraph.py:50
visDQMUpload.context
context
Definition:
visDQMUpload.py:30
edm::callWithTryCatchAndPrint
TReturn callWithTryCatchAndPrint(std::function< TReturn(void)> iFunc, char const *context=nullptr, bool disablePrint=false)
Definition:
ExceptionHelpers.h:49
Exception.h
cms::Exception
Definition:
Exception.h:70
edm::convertException::wrap
auto wrap(F iFunc) -> decltype(iFunc())
Definition:
ConvertException.h:19
ConvertException.h
Generated for CMSSW Reference Manual by
1.8.5