Basilisk CFD
Adaptive Cartesian mesh PDE framework
Loading...
Searching...
No Matches
fpe.h
Go to the documentation of this file.
1/** @file fpe.h
2 */
3// Catching floating-point-exceptions (and other signals)
4
7
8static int gdb()
9{
10 if (last_point.level >= 0) {
12 fputc ('\n', stderr);
13 fflush (stderr);
14 }
15 char command[80];
16 sprintf (command, "exec xterm -e 'gdb -p %d' & xterm -e 'gnuplot plot -'",
17 getpid());
18 return system (command);
19}
20
21static void caught_abort (int sig)
22{
23 fprintf (stderr, "Caught signal %d (Aborted)\n", sig);
24 gdb();
25}
26
27static void caught_fpe (int sig)
28{
29 fprintf (stderr, "Caught signal %d (Floating Point Exception)\n", sig);
30 gdb();
31 exit (1);
32}
33
34static void caught_segfault (int sig)
35{
36 fprintf (stderr, "Caught signal %d (Segmentation Fault)\n", sig);
37 gdb();
38 exit (2);
39}
40
41void catch_fpe (void)
42{
43 struct sigaction act;
44 act.sa_handler = caught_fpe;
45 sigemptyset (&act.sa_mask);
46 act.sa_flags = 0;
47 last_point.level = -1;
48 sigaction (8, &act, NULL); // FPE
49 act.sa_handler = caught_segfault;
50 sigaction (11, &act, NULL); // Segfault
51 act.sa_handler = caught_abort;
52 act.sa_flags = SA_RESETHAND;
53 sigaction (6, &act, NULL); // Abort
54}
static Point last_point
Definition cartesian.h:34
int x
Definition common.h:76
#define debug(...)
Definition display.h:82
static void caught_abort(int sig)
Definition fpe.h:21
static void caught_fpe(int sig)
Definition fpe.h:27
static void caught_segfault(int sig)
Definition fpe.h:34
include< signal.h > static include< unistd.h > int gdb()
Definition fpe.h:8
void catch_fpe(void)
Definition fpe.h:41
static int include(char *file, FILE *fin, FILE *fout)
Definition include.c:2801
int level
Definition linear.h:23
src vof fflush(ferr)