From 20d333afbaadde8a8daa4091e22cf549c6954a6a Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 24 Nov 2015 22:59:21 +0200 Subject: Make watchpoints fire before breakpoints in the debugger. --- debug.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'debug.c') diff --git a/debug.c b/debug.c index 5d7db01b..7699924c 100644 --- a/debug.c +++ b/debug.c @@ -3653,8 +3653,20 @@ debug_pre_execute(INSTRUCTION **pi) assert(sourceline > 0); - if (check_breakpoint(pi) - || check_watchpoint() + /* + * 11/2015: This used to check breakpoints first, but that could + * produce strange behavior, where a watchpoint doesn't print until + * some time after the data changed. This reworks things so that + * watchpoints are checked first. It's a bit of a hack, but + * the behavior for the user is more logical. + */ + if (check_watchpoint()) { + next_command(); /* return to debugger interface */ + if (stop.command == D_return) + *pi = stop.pc; /* jump to this instruction */ + else if (cur_pc->opcode == Op_breakpoint) + cur_pc = cur_pc->nexti; /* skip past the breakpoint instruction */ + } else if (check_breakpoint(pi) || (stop.check_func && stop.check_func(pi))) { next_command(); /* return to debugger interface */ if (stop.command == D_return) -- cgit v1.2.3