1 /* 2 The default error handlers and code that allows one to change 3 error handlers. 4 */ 5 #include <petscsys.h> /*I "petscsys.h" I*/ 6 7 /*@C 8 PetscAbortErrorHandler - Error handler that calls abort on error. 9 This routine is very useful when running in the debugger, because the 10 user can look directly at the stack frames and the variables where the error occurred 11 12 Not Collective 13 14 Input Parameters: 15 + comm - communicator over which error occurred 16 . line - the line number of the error (usually indicated by `__LINE__` in the calling routine) 17 . fun - the function name of the calling routine 18 . file - the file in which the error was detected (usually indicated by `__FILE__` in the calling routine) 19 . mess - an error text string, usually this is just printed to the screen 20 . n - the generic error number 21 . p - `PETSC_ERROR_INITIAL` indicates this is the first time the error handler is being called while `PETSC_ERROR_REPEAT` indicates it was previously called 22 - ctx - error handler context 23 24 Options Database Keys: 25 + -on_error_abort - Activates aborting when an error is encountered 26 - -start_in_debugger [noxterm,lldb or gdb] [-display name] - Starts all processes in the debugger and uses `PetscAbortErrorHandler()`. By default on Linux the 27 debugger is gdb and on macOS it is lldb 28 29 Level: developer 30 31 Notes: 32 Users do not directly employ this routine 33 34 Use `PetscPushErrorHandler()` to set the desired error handler. The 35 currently available PETSc error handlers include `PetscTraceBackErrorHandler()`, 36 `PetscAttachDebuggerErrorHandler()`, and `PetscAbortErrorHandler()`. 37 38 .seealso: `PetscError()`, `PetscPushErrorHandler()`, `PetscPopErrorHander()`, `PetscTraceBackErrorHandler()`, 39 `PetscAttachDebuggerErrorHandler()`, `PetscMPIAbortErrorHandler()`, `PetscReturnErrorHandler()`, `PetscEmacsClientErrorHandler()`, 40 `PetscErrorType`, `PETSC_ERROR_INITIAL`, `PETSC_ERROR_REPEAT`, `PetscErrorCode` 41 @*/ 42 PetscErrorCode PetscAbortErrorHandler(MPI_Comm comm, int line, const char *fun, const char *file, PetscErrorCode n, PetscErrorType p, const char *mess, void *ctx) 43 { 44 size_t len; 45 46 PetscFunctionBegin; 47 (void)comm; 48 (void)p; 49 (void)ctx; 50 (void)PetscStrlen(fun, &len); 51 if (len) { 52 n = (*PetscErrorPrintf)("PetscAbortErrorHandler: %s() at %s:%d %s\n To prevent termination, change the error handler using PetscPushErrorHandler()\n", fun, file, line, mess); 53 } else { 54 n = (*PetscErrorPrintf)("PetscAbortErrorHandler: %s\n To prevent termination, change the error handler using PetscPushErrorHandler()\n", mess); 55 } 56 abort(); 57 (void)n; 58 PetscFunctionReturn(PETSC_SUCCESS); 59 } 60