summaryrefslogtreecommitdiffstats
path: root/txr.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-11-13 21:19:43 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-11-13 21:19:43 -0800
commit1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac (patch)
tree18cb4ab7caf1d2b42139f98c80691e641a76efdd /txr.c
parentcc0f30f375914382e9e94e5bba26b14b2a734499 (diff)
downloadtxr-1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac.tar.gz
txr-1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac.tar.bz2
txr-1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac.zip
Adding a debugger. This is an experimental prototype.
* Makefile (OBJS): New object file debug.o. * dep.mk: Updated. * match.c (h_fun): Use debug_begin and debug_end macros to set up a debug frame for backtracing. (match_line, match_files): Call debug_check to give debugger a chance to instrument call. (v_fun): Use debug_begin and debug_end macros to set up a debug frame for backtracing. Call debug_check to give debugger a chance to instrument call. * stream.c (struct strm_ops): New function pointer, flush. (stdio_maybe_write_error): Wrong word in error message corrected. (stdio_flush): New static function. (stdio_ops, pipe_ops): New function entered into tables. (flush_stream): New function. * stream.h (flush_stream): Declared. * txr.c (help): New options documented. (main): call to debug_init added. New debug options parsed and opt_debugger set accordingly. * unwind.c (uw_push_debug, uw_current_frame): New function. * unwind.h (uw_frtype): New enumeration member UW_DBG. (struct uw_debug): New frame variant. (union uw_frame): New member, db. (uw_push_debug, uw_current_frame): Declared, * debug.c: New file. * debug.h: New file.
Diffstat (limited to 'txr.c')
-rw-r--r--txr.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/txr.c b/txr.c
index 644314f0..7a611432 100644
--- a/txr.c
+++ b/txr.c
@@ -40,6 +40,7 @@
#include "parser.h"
#include "match.h"
#include "utf8.h"
+#include "debug.h"
#include "txr.h"
const wchli_t *version = wli("041");
@@ -91,6 +92,8 @@ static void help(void)
"-q Quiet: don't report errors during query matching.\n"
"-v Verbose: extra logging from matcher.\n"
"-b Don't dump list of bindings.\n"
+"-l If dumping bindings, use a Lisp format.\n"
+"-d Debugger mode.\n"
"-a num Generate array variables up to num-dimensions.\n"
" Default is 1. Additional dimensions are fudged\n"
" by generating numeric suffixes\n"
@@ -103,6 +106,8 @@ static void help(void)
" to the utility.\n"
"--help You already know!\n"
"--version Display program version\n"
+"--lisp-bindings Synonym for -l\n"
+"--debugger Synonym for -d\n"
"\n"
"Options that take no argument can be combined. The -q and -v options\n"
"are mutually exclusive; the right-most one dominates.\n"
@@ -145,6 +150,7 @@ int main(int argc, char **argv)
init(progname, oom_realloc_handler, &stack_bottom);
match_init();
parse_init();
+ debug_init();
return txr_main(argc, argv);
}
@@ -288,6 +294,10 @@ int txr_main(int argc, char **argv)
opt_lisp_bindings = 1;
argv++, argc--;
continue;
+ } else if (!strcmp(*argv, "--debugger")) {
+ opt_debugger = 1;
+ argv++, argc--;
+ continue;
}
@@ -307,6 +317,9 @@ int txr_main(int argc, char **argv)
case 'l':
opt_lisp_bindings = 1;
break;
+ case 'd':
+ opt_debugger = 1;
+ break;
case 'a':
case 'c':
case 'D':