Actual source code: errtrace.c
1: #define PETSC_DLL
3: #include petsc.h
8: /*@C
9: PetscIgnoreErrorHandler - Ignores the error, allows program to continue as if error did not occure
11: Not Collective
13: Input Parameters:
14: + line - the line number of the error (indicated by __LINE__)
15: . func - the function where error is detected (indicated by __FUNCT__)
16: . file - the file in which the error was detected (indicated by __FILE__)
17: . dir - the directory of the file (indicated by __SDIR__)
18: . mess - an error text string, usually just printed to the screen
19: . n - the generic error number
20: . p - specific error number
21: - ctx - error handler context
23: Level: developer
25: Notes:
26: Most users need not directly employ this routine and the other error
27: handlers, but can instead use the simplified interface SETERRQ, which has
28: the calling sequence
29: $ SETERRQ(number,p,mess)
31: Notes for experienced users:
32: Use PetscPushErrorHandler() to set the desired error handler. The
33: currently available PETSc error handlers include PetscTraceBackErrorHandler(),
34: PetscAttachDebuggerErrorHandler(), PetscAbortErrorHandler(), and PetscStopErrorHandler()
36: Concepts: error handler^traceback
37: Concepts: traceback^generating
39: .seealso: PetscPushErrorHandler(), PetscAttachDebuggerErrorHandler(),
40: PetscAbortErrorHandler(), PetscTraceBackErrorHandler()
41: @*/
42: PetscErrorCode PETSC_DLLEXPORT PetscIgnoreErrorHandler(int line,const char *fun,const char* file,const char *dir,PetscErrorCode n,int p,const char *mess,void *ctx)
43: {
45: PetscFunctionReturn(n);
46: }
51: /*@C
53: PetscTraceBackErrorHandler - Default error handler routine that generates
54: a traceback on error detection.
56: Not Collective
58: Input Parameters:
59: + line - the line number of the error (indicated by __LINE__)
60: . func - the function where error is detected (indicated by __FUNCT__)
61: . file - the file in which the error was detected (indicated by __FILE__)
62: . dir - the directory of the file (indicated by __SDIR__)
63: . mess - an error text string, usually just printed to the screen
64: . n - the generic error number
65: . p - specific error number
66: - ctx - error handler context
68: Level: developer
70: Notes:
71: Most users need not directly employ this routine and the other error
72: handlers, but can instead use the simplified interface SETERRQ, which has
73: the calling sequence
74: $ SETERRQ(number,p,mess)
76: Notes for experienced users:
77: Use PetscPushErrorHandler() to set the desired error handler. The
78: currently available PETSc error handlers include PetscTraceBackErrorHandler(),
79: PetscAttachDebuggerErrorHandler(), PetscAbortErrorHandler(), and PetscStopErrorHandler()
81: Concepts: error handler^traceback
82: Concepts: traceback^generating
84: .seealso: PetscPushErrorHandler(), PetscAttachDebuggerErrorHandler(),
85: PetscAbortErrorHandler()
86: @*/
87: PetscErrorCode PETSC_DLLEXPORT PetscTraceBackErrorHandler(int line,const char *fun,const char* file,const char *dir,PetscErrorCode n,int p,const char *mess,void *ctx)
88: {
89: PetscLogDouble mem,rss;
90: PetscTruth flg1,flg2;
94: (*PetscErrorPrintf)("%s() line %d in %s%s\n",fun,line,dir,file);
95: if (p == 1) {
96: if (n == PETSC_ERR_MEM) {
97: (*PetscErrorPrintf)("Out of memory. This could be due to allocating\n");
98: (*PetscErrorPrintf)("too large an object or bleeding by not properly\n");
99: (*PetscErrorPrintf)("destroying unneeded objects.\n");
100: PetscMallocGetCurrentUsage(&mem);
101: PetscMemoryGetCurrentUsage(&rss);
102: PetscOptionsHasName(PETSC_NULL,"-malloc_dump",&flg1);
103: PetscOptionsHasName(PETSC_NULL,"-malloc_log",&flg2);
104: if (flg2) {
105: PetscMallocDumpLog(stdout);
106: } else {
107: (*PetscErrorPrintf)("Memory allocated %D Memory used by process %D\n",(PetscInt)mem,(PetscInt)rss);
108: if (flg1) {
109: PetscMallocDump(stdout);
110: } else {
111: (*PetscErrorPrintf)("Try running with -malloc_dump or -malloc_log for info.\n");
112: }
113: }
114: } else {
115: const char *text;
116: PetscErrorMessage(n,&text,PETSC_NULL);
117: if (text) (*PetscErrorPrintf)("%s!\n",text);
118: }
119: if (mess) {
120: (*PetscErrorPrintf)("%s!\n",mess);
121: }
122: }
123: PetscFunctionReturn(n);
124: }