Actual source code: pstack.c
2: #include <petscsys.h> /*I "petscsys.h" I*/
4: #if defined(PETSC_USE_DEBUG) && !defined(PETSC_USE_PTHREAD)
6: PetscStack *petscstack = 0;
10: PetscErrorCode PetscStackPublish(void)
11: {
13: return(0);
14: }
18: PetscErrorCode PetscStackDepublish(void)
19: {
21: return(0);
22: }
23:
26: PetscErrorCode PetscStackCreate(void)
27: {
30: PetscStack *petscstack_in;
31: if (petscstack) return 0;
32:
33: PetscNew(PetscStack,&petscstack_in);
34: petscstack_in->currentsize = 0;
35: petscstack = petscstack_in;
37: return 0;
38: }
42: PetscErrorCode PetscStackView(PetscViewer viewer)
43: {
45: int i;
46: FILE *file;
48: if (!viewer) viewer = PETSC_VIEWER_STDOUT_SELF;
49: PetscViewerASCIIGetPointer(viewer,&file);
51: if (file == PETSC_STDOUT) {
52: (*PetscErrorPrintf)("Note: The EXACT line numbers in the stack are not available,\n");
53: (*PetscErrorPrintf)(" INSTEAD the line number of the start of the function\n");
54: (*PetscErrorPrintf)(" is given.\n");
55: for (i=petscstack->currentsize-1; i>=0; i--) {
56: (*PetscErrorPrintf)("[%d] %s line %d %s%s\n",PetscGlobalRank,
57: petscstack->function[i],
58: petscstack->line[i],
59: petscstack->directory[i],
60: petscstack->file[i]);
61: }
62: } else {
63: fprintf(file,"Note: The EXACT line numbers in the stack are not available,\n");
64: fprintf(file," INSTEAD the line number of the start of the function\n");
65: fprintf(file," is given.\n");
66: for (i=petscstack->currentsize-1; i>=0; i--) {
67: fprintf(file,"[%d] %s line %d %s%s\n",PetscGlobalRank,
68: petscstack->function[i],
69: petscstack->line[i],
70: petscstack->directory[i],
71: petscstack->file[i]);
72: }
73: }
74: return 0;
75: }
80: PetscErrorCode PetscStackDestroy(void)
81: {
83: if (petscstack){
84: PetscStack *petscstack_in = petscstack;
85: petscstack = 0;
86: PetscFree(petscstack_in);
87: }
88: return 0;
89: }
94: PetscErrorCode PetscStackCopy(PetscStack* sint,PetscStack* sout)
95: {
96: int i;
98: if (!sint) {
99: sout->currentsize = 0;
100: } else {
101: for (i=0; i<sint->currentsize; i++) {
102: sout->function[i] = sint->function[i];
103: sout->file[i] = sint->file[i];
104: sout->directory[i] = sint->directory[i];
105: sout->line[i] = sint->line[i];
106: }
107: sout->currentsize = sint->currentsize;
108: }
109: return 0;
110: }
115: PetscErrorCode PetscStackPrint(PetscStack* sint,FILE *fp)
116: {
117: int i;
119: if (!sint) return(0);
120: for (i=sint->currentsize-3; i>=0; i--) {
121: fprintf(fp," [%d] %s() line %d in %s%s\n",PetscGlobalRank,sint->function[i],sint->line[i],sint->directory[i],sint->file[i]);
122: }
123: return 0;
124: }
126: #else
129: PetscErrorCode PetscStackPublish(void)
130: {
132: return(0);
133: }
136: PetscErrorCode PetscStackDepublish(void)
137: {
139: return(0);
140: }
143: PetscErrorCode PetscStackCreate(void)
144: {
146: return(0);
147: }
150: PetscErrorCode PetscStackView(PetscViewer viewer)
151: {
153: return(0);
154: }
157: PetscErrorCode PetscStackDestroy(void)
158: {
160: return(0);
161: }
163: #endif