]> git.donarmstrong.com Git - lilypond.git/blob - lily/debug.cc
release: 0.1.65
[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
20 #include "main.hh"
21 Dstream *monitor=0;
22 ostream * nulldev =0;
23
24
25 // ugh
26 struct _Dinit {
27   _Dinit()
28     {
29         nulldev = new ofstream ("/dev/null");
30         monitor = new Dstream (&cout,".dstreamrc");
31     }
32   ~_Dinit()
33     {
34         delete nulldev;
35         delete monitor;
36     }
37 } dinit;
38
39
40
41 /*
42   want to do a stacktrace .
43   */
44 void
45 mynewhandler()
46 {
47   assert (false);
48 }
49
50 void
51 float_handler (int)
52 {
53   cerr << _("Floating point exception .. \n")<< flush;
54   assert (false);
55 }
56
57
58 void
59 debug_init()
60 {
61 #ifndef NDEBUG
62   // libg++ 2.8.0 doesn't have set_new_handler
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 #include <malloc.h>
80
81 void *
82 operator new (size_t size)
83 {
84   void *result;
85   result = malloc (size);
86   if (check_malloc_b)
87     memfrob (result, size);
88   return result;
89 }
90
91
92 void 
93 operator delete (void *p)
94 {
95   if (!p)
96     return ;
97   if (check_malloc_b)
98     memfrob (p, 8);             // ugh.  Need the blocksize.   8 is sysdependant
99
100   free (p);
101 }
102 #endif // MEMORY_PARANOID
103
104 void
105 set_debug (bool b)
106 {
107   check_debug =b;
108   set_flower_debug (*monitor, check_debug);
109   check_malloc_b = experimental_features_global_b;
110 #ifdef MEMORY_PARANOID
111   if (check_malloc_b)
112     if (mcheck (0))
113       warning ("Can't set mem-checking!");
114 #endif
115 }
116