xref: /csrg-svn/old/dbx/debug.c (revision 18216)
112550Scsvaf /* Copyright (c) 1982 Regents of the University of California */
212550Scsvaf 
3*18216Slinton static	char sccsid[] = "@(#)debug.c	1.5 (Berkeley) 03/01/85";
412550Scsvaf 
5*18216Slinton static char rcsid[] = "$Header: debug.c,v 1.5 84/12/26 10:39:01 linton Exp $";
6*18216Slinton 
712550Scsvaf /*
812550Scsvaf  *  Debug routines
912550Scsvaf  */
1012550Scsvaf 
1112550Scsvaf #include "defs.h"
1212550Scsvaf #include "tree.h"
1312550Scsvaf #include "operators.h"
1412550Scsvaf #include "eval.h"
1512550Scsvaf #include "events.h"
1612550Scsvaf #include "symbols.h"
1712550Scsvaf #include "scanner.h"
1812550Scsvaf #include "source.h"
1912550Scsvaf #include "object.h"
20*18216Slinton #include "main.h"
2112550Scsvaf #include "mappings.h"
2212550Scsvaf #include "process.h"
2312550Scsvaf #include "machine.h"
24*18216Slinton #include "debug.h"
2512550Scsvaf #include <signal.h>
2612550Scsvaf 
27*18216Slinton public boolean tracetree;	/* trace building of parse trees */
28*18216Slinton public boolean traceeval;	/* trace tree evaluation */
2912550Scsvaf 
30*18216Slinton /*
31*18216Slinton  * Dynamically turn on/off a debug flag, or display some information.
32*18216Slinton  */
3312550Scsvaf 
34*18216Slinton public debug (p)
3512550Scsvaf Node p;
3612550Scsvaf {
37*18216Slinton     int code;
3812550Scsvaf 
39*18216Slinton     code = p->value.lcon;
40*18216Slinton     switch (code) {
41*18216Slinton 	case 0:
42*18216Slinton 	    puts("debugging flags:");
43*18216Slinton 	    puts("    1        trace scanner return values");
44*18216Slinton 	    puts("    2        trace breakpoints");
45*18216Slinton 	    puts("    3        trace execution");
46*18216Slinton 	    puts("    4        trace tree building");
47*18216Slinton 	    puts("    5        trace tree evaluation");
48*18216Slinton 	    puts("   -[12345]  turns off corresponding flag");
49*18216Slinton 	    puts("    6        dump function table");
50*18216Slinton 	    break;
5112550Scsvaf 
52*18216Slinton 	case 1:
53*18216Slinton 	case -1:
54*18216Slinton #           ifdef LEXDEBUG
55*18216Slinton 		lexdebug = (boolean) (code > 0);
56*18216Slinton #           else
57*18216Slinton 		error("can't debug scanner (not compiled with LEXDEBUG)");
58*18216Slinton #           endif
59*18216Slinton 	    break;
6012550Scsvaf 
61*18216Slinton 	case 2:
62*18216Slinton 	case -2:
63*18216Slinton 	    tracebpts = (boolean) (code > 0);
64*18216Slinton 	    break;
6512550Scsvaf 
66*18216Slinton 	case 3:
67*18216Slinton 	case -3:
68*18216Slinton 	    traceexec = (boolean) (code > 0);
69*18216Slinton 	    break;
7012550Scsvaf 
71*18216Slinton 	case 4:
72*18216Slinton 	case -4:
73*18216Slinton 	    tracetree = (boolean) (code > 0);
74*18216Slinton 	    break;
7512550Scsvaf 
76*18216Slinton 	case 5:
77*18216Slinton 	case -5:
78*18216Slinton 	    traceeval = (boolean) (code > 0);
79*18216Slinton 	    break;
8012550Scsvaf 
81*18216Slinton 	case 6:
82*18216Slinton 	    dumpfunctab();
83*18216Slinton 	    break;
84*18216Slinton 
85*18216Slinton 	default:
86*18216Slinton 	    error("unknown debug flag");
87*18216Slinton 	    break;
88*18216Slinton     }
8912550Scsvaf }
9012550Scsvaf 
91*18216Slinton private String leafname[] = {
92*18216Slinton     "nop", "name", "sym", "lcon", "fcon", "scon", "rval", "index"
93*18216Slinton };
9412550Scsvaf 
95*18216Slinton public String opname (op)
96*18216Slinton Operator op;
9712550Scsvaf {
98*18216Slinton     String s;
99*18216Slinton     static char buf[100];
10012550Scsvaf 
101*18216Slinton     switch (op) {
102*18216Slinton 	case O_ITOF:
103*18216Slinton 	    s = "itof";
104*18216Slinton 	    break;
10512550Scsvaf 
106*18216Slinton 	case O_ENDX:
107*18216Slinton 	    s = "endx";
108*18216Slinton 	    break;
10912550Scsvaf 
110*18216Slinton 	case O_QLINE:
111*18216Slinton 	    s = "qline";
112*18216Slinton 	    break;
11312550Scsvaf 
114*18216Slinton 	default:
115*18216Slinton 	    if (ord(op) <= ord(O_INDEX)) {
116*18216Slinton 		s = leafname[ord(op)];
117*18216Slinton 	    } else {
118*18216Slinton 		s = opinfo[ord(op)].opstring;
119*18216Slinton 		if (s == nil) {
120*18216Slinton 		    sprintf(buf, "[op %d]", op);
121*18216Slinton 		    s = buf;
12212550Scsvaf 		}
123*18216Slinton 	    }
124*18216Slinton 	    break;
12512550Scsvaf     }
126*18216Slinton     return s;
12712550Scsvaf }
128