src
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
HiBiasedCentrality_cfi.function
function
Definition:
HiBiasedCentrality_cfi.py:4
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
HLT enums.
Definition:
AlignableModifier.h:19
edm::convertException::wrap
auto wrap(F iFunc) -> decltype(iFunc())
Definition:
ConvertException.h:19
ConvertException.h
Generated for CMSSW Reference Manual by
1.8.14