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