diff options
author | William Langford <wlangfor@gmail.com> | 2017-02-20 00:49:28 -0500 |
---|---|---|
committer | Nicolas Williams <nico@cryptonector.com> | 2017-03-26 05:36:22 -0500 |
commit | 94035be3fa80ea201e82ee4b59ee6434357732f6 (patch) | |
tree | 42dc185f1e7d1caefdded7d549768c1573c47ec0 | |
parent | c8a2a0acc23e87cb28db794ee95f7d8b87d3ccbb (diff) |
Add --debug-trace=all for detailed debug output
When tracing execution, print the whole stack, not just the items used by the
current opcode
-rw-r--r-- | src/execute.c | 17 | ||||
-rw-r--r-- | src/jq.h | 6 | ||||
-rw-r--r-- | src/main.c | 4 |
3 files changed, 18 insertions, 9 deletions
diff --git a/src/execute.c b/src/execute.c index 0fcaaf02..d5672165 100644 --- a/src/execute.c +++ b/src/execute.c @@ -365,10 +365,9 @@ jv jq_next(jq_state *jq) { if (!backtracking) { int stack_in = opdesc->stack_in; if (stack_in == -1) stack_in = pc[1]; + param = jq->stk_top; for (int i=0; i<stack_in; i++) { - if (i == 0) { - param = jq->stk_top; - } else { + if (i != 0) { printf(" | "); param = *stack_block_next(&jq->stk, param); } @@ -378,6 +377,12 @@ jv jq_next(jq_state *jq) { //printf(" -- "); //jv_dump(jv_copy(jq->path), 0); } + if (jq->debug_trace_enabled & JQ_DEBUG_TRACE_DETAIL) { + while ((param = *stack_block_next(&jq->stk, param))) { + printf(" || "); + jv_dump(jv_copy(*(jv*)stack_block(&jq->stk, param)), JV_PRINT_REFCOUNT); + } + } } else { printf("\t<backtracking>"); } @@ -1033,11 +1038,7 @@ void jq_start(jq_state *jq, jv input, int flags) { stack_push(jq, input); stack_save(jq, jq->bc->code, stack_get_pos(jq)); - if (flags & JQ_DEBUG_TRACE) { - jq->debug_trace_enabled = 1; - } else { - jq->debug_trace_enabled = 0; - } + jq->debug_trace_enabled = flags & JQ_DEBUG_TRACE_ALL; jq->initial_execution = 1; } @@ -4,7 +4,11 @@ #include <stdio.h> #include "jv.h" -enum {JQ_DEBUG_TRACE = 1}; +enum { + JQ_DEBUG_TRACE = 1, + JQ_DEBUG_TRACE_DETAIL = 2, + JQ_DEBUG_TRACE_ALL = JQ_DEBUG_TRACE | JQ_DEBUG_TRACE_DETAIL, +}; typedef struct jq_state jq_state; typedef void (*jq_msg_cb)(void *, jv); @@ -475,6 +475,10 @@ int main(int argc, char* argv[]) { options |= DUMP_DISASM; continue; } + if (isoption(argv[i], 0, "debug-trace=all", &short_opts)) { + jq_flags |= JQ_DEBUG_TRACE_ALL; + if (!short_opts) continue; + } if (isoption(argv[i], 0, "debug-trace", &short_opts)) { jq_flags |= JQ_DEBUG_TRACE; continue; |