LLVM: llvm::CrashRecoveryContext Class Reference (original) (raw)
Crash recovery helper object. More...
#include "[llvm/Support/CrashRecoveryContext.h](CrashRecoveryContext%5F8h%5Fsource.html)"
| Public Member Functions | |
|---|---|
| LLVM_ABI | CrashRecoveryContext () |
| LLVM_ABI | ~CrashRecoveryContext () |
| LLVM_ABI void | registerCleanup (CrashRecoveryContextCleanup *cleanup) |
| Register cleanup handler, which is used when the recovery context is finished. | |
| LLVM_ABI void | unregisterCleanup (CrashRecoveryContextCleanup *cleanup) |
| LLVM_ABI bool | RunSafely (function_ref< void()> Fn) |
| Execute the provided callback function (with the given arguments) in a protected context. | |
| LLVM_ABI bool | RunSafelyOnThread (function_ref< void()>, unsigned RequestedStackSize=0) |
| Execute the provide callback function (with the given arguments) in a protected context which is run in another thread (optionally with a requested stack size). | |
| LLVM_ABI bool | RunSafelyOnNewStack (function_ref< void()>, unsigned RequestedStackSize=0) |
| LLVM_ABI void | HandleExit (int RetCode) |
| Explicitly trigger a crash recovery in the current process, and return failure from RunSafely(). |
| Static Public Member Functions | |
|---|---|
| static LLVM_ABI void | Enable () |
| Enable crash recovery. | |
| static LLVM_ABI void | Disable () |
| Disable crash recovery. | |
| static LLVM_ABI CrashRecoveryContext * | GetCurrent () |
| Return the active context, if the code is currently executing in a thread which is in a protected context. | |
| static LLVM_ABI bool | isRecoveringFromCrash () |
| Return true if the current thread is recovering from a crash. | |
| static LLVM_ABI bool | isCrash (int RetCode) |
| Return true if RetCode indicates that a signal or an exception occurred. | |
| static LLVM_ABI bool | throwIfCrash (int RetCode) |
| Throw again a signal or an exception, after it was catched once by a CrashRecoveryContext. |
| Public Attributes | |
|---|---|
| int | RetCode = 0 |
| In case of a crash, this is the crash identifier. | |
| bool | DumpStackAndCleanupOnFailure = false |
| Selects whether handling of failures should be done in the same way as for regular crashes. |
Crash recovery helper object.
This class implements support for running operations in a safe context so that crashes (memory errors, stack overflow, assertion violations) can be detected and control restored to the crashing thread. Crash detection is purely "best effort", the exact set of failures which can be recovered from is platform dependent.
Clients make use of this code by first calling CrashRecoveryContext::Enable(), and then executing unsafe operations via a CrashRecoveryContext object. For example:
void actual_work(void *);
void foo() {
CrashRecoveryContext CRC;
if (!CRC.RunSafely(actual_work, 0)) {
... a crash was detected, report error to user ...
}
... no crash was detected ...
}
LLVM_ABI bool RunSafely(function_ref< void()> Fn)
Execute the provided callback function (with the given arguments) in a protected context.
LLVM_ABI CrashRecoveryContext()
To assist recovery the class allows specifying set of actions that will be executed in any case, whether crash occurs or not. These actions may be used to reclaim resources in the case of crash.
Definition at line 47 of file CrashRecoveryContext.h.
| CrashRecoveryContext::CrashRecoveryContext | ( | ) |
|---|
◆ ~CrashRecoveryContext()
| CrashRecoveryContext::~CrashRecoveryContext | ( | ) |
|---|
◆ Disable()
| void CrashRecoveryContext::Disable ( ) | static |
|---|
◆ Enable()
| void CrashRecoveryContext::Enable ( ) | static |
|---|
◆ GetCurrent()
◆ HandleExit()
| void CrashRecoveryContext::HandleExit | ( | int | RetCode | ) |
|---|
◆ isCrash()
| bool CrashRecoveryContext::isCrash ( int RetCode) | static |
|---|
◆ isRecoveringFromCrash()
| bool CrashRecoveryContext::isRecoveringFromCrash ( ) | static |
|---|
◆ registerCleanup()
◆ RunSafely()
Execute the provided callback function (with the given arguments) in a protected context.
Returns
True if the function completed successfully, and false if the function crashed (or HandleCrash was called explicitly). Clients should make as little assumptions as possible about the program state when RunSafely has returned false.
Definition at line 413 of file CrashRecoveryContext.cpp.
References assert().
Referenced by RunSafelyOnNewStack().
◆ RunSafelyOnNewStack()
◆ RunSafelyOnThread()
◆ throwIfCrash()
| bool CrashRecoveryContext::throwIfCrash ( int RetCode) | static |
|---|
◆ unregisterCleanup()
◆ DumpStackAndCleanupOnFailure
bool llvm::CrashRecoveryContext::DumpStackAndCleanupOnFailure = false
Selects whether handling of failures should be done in the same way as for regular crashes.
When this is active, a crash would print the callstack, clean-up any temporary files and create a coredump/minidump.
Definition at line 115 of file CrashRecoveryContext.h.
◆ RetCode
int llvm::CrashRecoveryContext::RetCode = 0
The documentation for this class was generated from the following files:
- include/llvm/Support/CrashRecoveryContext.h
- lib/Support/CrashRecoveryContext.cpp