xref: /petsc/src/sys/error/errabort.c (revision 8ff741ac7cdff47f2e2eef1c0728bbec021bb9cf)
1e5c89e4eSSatish Balay /*
2e5c89e4eSSatish Balay        The default error handlers and code that allows one to change
3e5c89e4eSSatish Balay    error handlers.
4e5c89e4eSSatish Balay */
5c6db04a5SJed Brown #include <petscsys.h> /*I "petscsys.h" I*/
6e5c89e4eSSatish Balay 
7e5c89e4eSSatish Balay /*@C
8e5c89e4eSSatish Balay   PetscAbortErrorHandler - Error handler that calls abort on error.
9e5c89e4eSSatish Balay   This routine is very useful when running in the debugger, because the
10e5c89e4eSSatish Balay   user can look directly at the stack frames and the variables.
11e5c89e4eSSatish Balay 
12e5c89e4eSSatish Balay   Not Collective
13e5c89e4eSSatish Balay 
14e5c89e4eSSatish Balay   Input Parameters:
15e32f2f54SBarry Smith + comm - communicator over which error occurred
16e32f2f54SBarry Smith . line - the line number of the error (indicated by __LINE__)
1710450e9eSJacob Faibussowitsch . fun  - the function name
18e5c89e4eSSatish Balay . file - the file in which the error was detected (indicated by __FILE__)
19e5c89e4eSSatish Balay . mess - an error text string, usually just printed to the screen
20e5c89e4eSSatish Balay . n    - the generic error number
21e5c89e4eSSatish Balay . p    - specific error number
22e5c89e4eSSatish Balay - ctx  - error handler context
23e5c89e4eSSatish Balay 
24e5c89e4eSSatish Balay   Options Database Keys:
25e5c89e4eSSatish Balay + -on_error_abort                                         - Activates aborting when an error is encountered
26e5c89e4eSSatish Balay - -start_in_debugger [noxterm,dbx,xxgdb]  [-display name] - Starts all
27e5c89e4eSSatish Balay     processes in the debugger and uses PetscAbortErrorHandler().  By default the
28e5c89e4eSSatish Balay     debugger is gdb; alternatives are dbx and xxgdb.
29e5c89e4eSSatish Balay 
30e5c89e4eSSatish Balay   Level: developer
31e5c89e4eSSatish Balay 
32e5c89e4eSSatish Balay   Notes:
33baca6076SPierre Jolivet   Users do not directly employ this routine
34e5c89e4eSSatish Balay 
35811af0c4SBarry Smith   Use `PetscPushErrorHandler()` to set the desired error handler.  The
36811af0c4SBarry Smith   currently available PETSc error handlers include `PetscTraceBackErrorHandler()`,
37811af0c4SBarry Smith   `PetscAttachDebuggerErrorHandler()`, and `PetscAbortErrorHandler()`.
38e5c89e4eSSatish Balay 
39db781477SPatrick Sanan .seealso: `PetscError()`, `PetscPushErrorHandler()`, `PetscPopErrorHander()`, `PetscTraceBackErrorHandler()`,
40db781477SPatrick Sanan           `PetscAttachDebuggerErrorHandler()`, `PetscMPIAbortErrorHandler()`, `PetscReturnErrorHandler()`, `PetscEmacsClientErrorHandler()`
41e5c89e4eSSatish Balay @*/
42d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscAbortErrorHandler(MPI_Comm comm, int line, const char *fun, const char *file, PetscErrorCode n, PetscErrorType p, const char *mess, void *ctx)
43d71ae5a4SJacob Faibussowitsch {
44*8ff741acSBarry Smith   size_t len;
45*8ff741acSBarry Smith 
46e5c89e4eSSatish Balay   PetscFunctionBegin;
4710450e9eSJacob Faibussowitsch   (void)comm;
4810450e9eSJacob Faibussowitsch   (void)p;
4910450e9eSJacob Faibussowitsch   (void)ctx;
50*8ff741acSBarry Smith   (void)PetscStrlen(fun, &len);
51*8ff741acSBarry Smith   if (len) {
523ba16761SJacob Faibussowitsch     n = (*PetscErrorPrintf)("PetscAbortErrorHandler: %s() at %s:%d %s\n  To prevent termination, change the error handler using PetscPushErrorHandler()\n", fun, file, line, mess);
53*8ff741acSBarry Smith   } else {
54*8ff741acSBarry Smith     n = (*PetscErrorPrintf)("PetscAbortErrorHandler: %s\n  To prevent termination, change the error handler using PetscPushErrorHandler()\n", mess);
55*8ff741acSBarry Smith   }
56e5c89e4eSSatish Balay   abort();
572b7c89d8SPierre Jolivet   (void)n;
583ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
59e5c89e4eSSatish Balay }
60