]> git.donarmstrong.com Git - lilypond.git/blob - lily/debug.cc
release: 0.1.41
[lilypond.git] / lily / debug.cc
1 /*   
2   debug.cc --  implement debugging routines
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1996,98 Han-Wen Nienhuys <hanwen@stack.nl>
7   
8  */
9 #include <malloc.h>
10 #include <fstream.h>
11 #include <signal.h>
12 #include <std/new.h>
13 #include <stdlib.h>
14 #include "debug.hh"
15 #include "dstream.hh"
16 #include "flower-debug.hh"
17 #include "moment.hh"
18 #include "main.hh"
19 Dstream *monitor=0;
20 ostream * nulldev =0;
21
22
23 // ugh
24 struct _Dinit {
25   _Dinit()
26     {
27         nulldev = new ofstream ("/dev/null");
28         monitor = new Dstream (&cout,".dstreamrc");
29     }
30   ~_Dinit()
31     {
32         delete nulldev;
33         delete monitor;
34     }
35 } dinit;
36
37
38
39 /*
40   want to do a stacktrace .
41   */
42 void
43 mynewhandler()
44 {
45   assert (false);
46 }
47
48 void
49 float_handler (int)
50 {
51   cerr << _("Floating point exception .. \n")<< flush;
52   assert (false);
53 }
54
55 /// just to make sure print_rat is linked in
56 static void (*rat_printer)(Moment const&);
57
58 void
59 debug_init()
60 {
61   rat_printer = print_rat;
62 #ifndef NDEBUG
63   set_new_handler (&mynewhandler);
64 #endif
65   set_flower_debug (*monitor, check_debug);
66
67   signal (SIGFPE, float_handler);
68 }
69
70 bool check_debug=false;
71
72
73 bool check_malloc_b = false;
74
75 // #define MEMORY_PARANOID
76
77 #ifdef MEMORY_PARANOID
78
79
80 void *
81 operator new (size_t size)
82 {
83   void *result;
84   result = malloc (size);
85   if (check_malloc_b)
86     memfrob (result, size);
87   return result;
88 }
89
90
91 void 
92 operator delete (void *p)
93 {
94   if (!p)
95     return ;
96   if (check_malloc_b)
97     memfrob (p, 8);             // ugh.  Need the blocksize.   8 is sysdependant
98
99   free (p);
100 }
101 #endif // MEMORY_PARANOID
102
103 void
104 set_debug (bool b)
105 {
106   check_debug =b;
107   set_flower_debug (*monitor, check_debug);
108   check_malloc_b = experimental_features_global_b;
109 }
110