xref: /csrg-svn/old/dbx/debug.c (revision 21628)
1*21628Sdist /*
2*21628Sdist  * Copyright (c) 1983 Regents of the University of California.
3*21628Sdist  * All rights reserved.  The Berkeley software License Agreement
4*21628Sdist  * specifies the terms and conditions for redistribution.
5*21628Sdist  */
612550Scsvaf 
7*21628Sdist #ifndef lint
8*21628Sdist static char sccsid[] = "@(#)debug.c	5.1 (Berkeley) 05/31/85";
9*21628Sdist #endif not lint
1012550Scsvaf 
1118216Slinton static char rcsid[] = "$Header: debug.c,v 1.5 84/12/26 10:39:01 linton Exp $";
1218216Slinton 
1312550Scsvaf /*
1412550Scsvaf  *  Debug routines
1512550Scsvaf  */
1612550Scsvaf 
1712550Scsvaf #include "defs.h"
1812550Scsvaf #include "tree.h"
1912550Scsvaf #include "operators.h"
2012550Scsvaf #include "eval.h"
2112550Scsvaf #include "events.h"
2212550Scsvaf #include "symbols.h"
2312550Scsvaf #include "scanner.h"
2412550Scsvaf #include "source.h"
2512550Scsvaf #include "object.h"
2618216Slinton #include "main.h"
2712550Scsvaf #include "mappings.h"
2812550Scsvaf #include "process.h"
2912550Scsvaf #include "machine.h"
3018216Slinton #include "debug.h"
3112550Scsvaf #include <signal.h>
3212550Scsvaf 
3318216Slinton public boolean tracetree;	/* trace building of parse trees */
3418216Slinton public boolean traceeval;	/* trace tree evaluation */
3512550Scsvaf 
3618216Slinton /*
3718216Slinton  * Dynamically turn on/off a debug flag, or display some information.
3818216Slinton  */
3912550Scsvaf 
4018216Slinton public debug (p)
4112550Scsvaf Node p;
4212550Scsvaf {
4318216Slinton     int code;
4412550Scsvaf 
4518216Slinton     code = p->value.lcon;
4618216Slinton     switch (code) {
4718216Slinton 	case 0:
4818216Slinton 	    puts("debugging flags:");
4918216Slinton 	    puts("    1        trace scanner return values");
5018216Slinton 	    puts("    2        trace breakpoints");
5118216Slinton 	    puts("    3        trace execution");
5218216Slinton 	    puts("    4        trace tree building");
5318216Slinton 	    puts("    5        trace tree evaluation");
5418216Slinton 	    puts("   -[12345]  turns off corresponding flag");
5518216Slinton 	    puts("    6        dump function table");
5618216Slinton 	    break;
5712550Scsvaf 
5818216Slinton 	case 1:
5918216Slinton 	case -1:
6018216Slinton #           ifdef LEXDEBUG
6118216Slinton 		lexdebug = (boolean) (code > 0);
6218216Slinton #           else
6318216Slinton 		error("can't debug scanner (not compiled with LEXDEBUG)");
6418216Slinton #           endif
6518216Slinton 	    break;
6612550Scsvaf 
6718216Slinton 	case 2:
6818216Slinton 	case -2:
6918216Slinton 	    tracebpts = (boolean) (code > 0);
7018216Slinton 	    break;
7112550Scsvaf 
7218216Slinton 	case 3:
7318216Slinton 	case -3:
7418216Slinton 	    traceexec = (boolean) (code > 0);
7518216Slinton 	    break;
7612550Scsvaf 
7718216Slinton 	case 4:
7818216Slinton 	case -4:
7918216Slinton 	    tracetree = (boolean) (code > 0);
8018216Slinton 	    break;
8112550Scsvaf 
8218216Slinton 	case 5:
8318216Slinton 	case -5:
8418216Slinton 	    traceeval = (boolean) (code > 0);
8518216Slinton 	    break;
8612550Scsvaf 
8718216Slinton 	case 6:
8818216Slinton 	    dumpfunctab();
8918216Slinton 	    break;
9018216Slinton 
9118216Slinton 	default:
9218216Slinton 	    error("unknown debug flag");
9318216Slinton 	    break;
9418216Slinton     }
9512550Scsvaf }
9612550Scsvaf 
9718216Slinton private String leafname[] = {
9818216Slinton     "nop", "name", "sym", "lcon", "fcon", "scon", "rval", "index"
9918216Slinton };
10012550Scsvaf 
10118216Slinton public String opname (op)
10218216Slinton Operator op;
10312550Scsvaf {
10418216Slinton     String s;
10518216Slinton     static char buf[100];
10612550Scsvaf 
10718216Slinton     switch (op) {
10818216Slinton 	case O_ITOF:
10918216Slinton 	    s = "itof";
11018216Slinton 	    break;
11112550Scsvaf 
11218216Slinton 	case O_ENDX:
11318216Slinton 	    s = "endx";
11418216Slinton 	    break;
11512550Scsvaf 
11618216Slinton 	case O_QLINE:
11718216Slinton 	    s = "qline";
11818216Slinton 	    break;
11912550Scsvaf 
12018216Slinton 	default:
12118216Slinton 	    if (ord(op) <= ord(O_INDEX)) {
12218216Slinton 		s = leafname[ord(op)];
12318216Slinton 	    } else {
12418216Slinton 		s = opinfo[ord(op)].opstring;
12518216Slinton 		if (s == nil) {
12618216Slinton 		    sprintf(buf, "[op %d]", op);
12718216Slinton 		    s = buf;
12812550Scsvaf 		}
12918216Slinton 	    }
13018216Slinton 	    break;
13112550Scsvaf     }
13218216Slinton     return s;
13312550Scsvaf }
134