Add --debug-trace=all for detailed debug output
When tracing execution, print the whole stack, not just the items used by the current opcode
This commit is contained in:
1 parent
c8a2a0acc2
commit
94035be3fa
3 files changed
+18
-9
No files matched your search
+9
-8
@@ -365,10 +365,9 @@ jv jq_next(jq_state *jq) {
|
|||||||
if (!backtracking) {
|
if (!backtracking) {
|
||||||
int stack_in = opdesc->stack_in;
|
int stack_in = opdesc->stack_in;
|
||||||
if (stack_in == -1) stack_in = pc[1];
|
if (stack_in == -1) stack_in = pc[1];
|
||||||
|
param = jq->stk_top;
|
||||||
for (int i=0; i<stack_in; i++) {
|
for (int i=0; i<stack_in; i++) {
|
||||||
if (i == 0) {
|
if (i != 0) {
|
||||||
param = jq->stk_top;
|
|
||||||
} else {
|
|
||||||
printf(" | ");
|
printf(" | ");
|
||||||
param = *stack_block_next(&jq->stk, param);
|
param = *stack_block_next(&jq->stk, param);
|
||||||
}
|
}
|
||||||
@@ -378,6 +377,12 @@ jv jq_next(jq_state *jq) {
|
|||||||
//printf(" -- ");
|
//printf(" -- ");
|
||||||
//jv_dump(jv_copy(jq->path), 0);
|
//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 {
|
} else {
|
||||||
printf("\t<backtracking>");
|
printf("\t<backtracking>");
|
||||||
}
|
}
|
||||||
@@ -1033,11 +1038,7 @@ void jq_start(jq_state *jq, jv input, int flags) {
|
|||||||
|
|
||||||
stack_push(jq, input);
|
stack_push(jq, input);
|
||||||
stack_save(jq, jq->bc->code, stack_get_pos(jq));
|
stack_save(jq, jq->bc->code, stack_get_pos(jq));
|
||||||
if (flags & JQ_DEBUG_TRACE) {
|
jq->debug_trace_enabled = flags & JQ_DEBUG_TRACE_ALL;
|
||||||
jq->debug_trace_enabled = 1;
|
|
||||||
} else {
|
|
||||||
jq->debug_trace_enabled = 0;
|
|
||||||
}
|
|
||||||
jq->initial_execution = 1;
|
jq->initial_execution = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,11 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "jv.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 struct jq_state jq_state;
|
||||||
typedef void (*jq_msg_cb)(void *, jv);
|
typedef void (*jq_msg_cb)(void *, jv);
|
||||||
|
|||||||
@@ -475,6 +475,10 @@ int main(int argc, char* argv[]) {
|
|||||||
options |= DUMP_DISASM;
|
options |= DUMP_DISASM;
|
||||||
continue;
|
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)) {
|
if (isoption(argv[i], 0, "debug-trace", &short_opts)) {
|
||||||
jq_flags |= JQ_DEBUG_TRACE;
|
jq_flags |= JQ_DEBUG_TRACE;
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in new issue
Block a user