Mercurial > hg-old > index.cgi
diff lwasm/debug.c @ 372:90de73ba0cac
Created a useful debug framework and adjusted lw_expr_print() to return a "static" dynamic string
author | lost@starbug |
---|---|
date | Thu, 22 Apr 2010 18:19:06 -0600 |
parents | 6b33faa21a0a |
children | eacdae8a1575 |
line wrap: on
line diff
--- a/lwasm/debug.c Wed Apr 21 23:29:18 2010 -0600 +++ b/lwasm/debug.c Thu Apr 22 18:19:06 2010 -0600 @@ -32,7 +32,7 @@ Various debug utilities */ -void dump_state(asmstate_t *as, FILE *fp) +void dump_state(asmstate_t *as) { line_t *cl; exportlist_t *ex; @@ -41,40 +41,51 @@ struct line_expr_s *le; lwasm_error_t *e; - fprintf(fp, "Lines:\n"); + debug_message(as, 100, "Lines:"); for (cl = as -> line_head; cl; cl = cl -> next) { - fprintf(fp, "%p ", cl); - if (cl -> insn >= 0) - { - fprintf(fp, "INSN %d (%s) ", cl -> insn, instab[cl -> insn].opcode); - fprintf(fp, "LEN %d ", cl -> len); - } - fprintf(fp, "\n ADDR:"); - lw_expr_print(cl -> addr, fp); + debug_message(as, 100, "%p INSN %d (%s) LEN %d", cl, cl -> insn, (cl -> insn >= 0) ? instab[cl -> insn].opcode : "<none>", cl -> len); + debug_message(as, 100, " ADDR: %s", lw_expr_print(cl -> addr)); + for (le = cl -> exprs; le; le = le -> next) { - fprintf(fp, "\n EXPR %d:", le -> id); - lw_expr_print(le -> expr, fp); + debug_message(as, 100, " EXPR %d: %s", le -> id, lw_expr_print(le -> expr)); } if (cl -> outputl > 0) { int i; - fprintf(fp, "\n OUTPUT:"); for (i = 0; i < cl -> outputl; i++) { - fprintf(fp, "%02X", cl -> output[i]); + debug_message(as, 100, " OBYTE %02X: %02X", i, cl -> output[i]); } } for (e = cl -> err; e; e = e -> next) { - fprintf(fp, "\n ERR: %s", e -> mess); + debug_message(as, 100, " ERR: %s", e -> mess); } for (e = cl -> warn; e; e = e -> next) { - fprintf(fp, "\n WARN: %s", e -> mess); + debug_message(as, 100, " WARN: %s", e -> mess); } - fprintf(fp, "\n"); } } + +void debug_message(asmstate_t *as, int level, const char *fmt, ...) +{ + va_list args; + + if (as -> debug_level < level) + return; + + if (as -> debug_file == NULL) + as -> debug_file = stderr; + + va_start(args, fmt); + + fprintf(as -> debug_file, "DEBUG %03d: ", level); + vfprintf(as -> debug_file, fmt, args); + fputc('\n', as -> debug_file); + + va_end(args); +}