diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2015-11-24 23:03:43 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2015-11-24 23:03:43 +0200 |
commit | 4ab2029a091a88a3b1968c55468b8c91ae1e6a2d (patch) | |
tree | b5f2f266ced5e5c84b04eb4703b7f8fb27a673f5 /debug.c | |
parent | cd8cfd261a21ece90196b961f1113bffe8b25e1e (diff) | |
parent | 20d333afbaadde8a8daa4091e22cf549c6954a6a (diff) | |
download | egawk-4ab2029a091a88a3b1968c55468b8c91ae1e6a2d.tar.gz egawk-4ab2029a091a88a3b1968c55468b8c91ae1e6a2d.tar.bz2 egawk-4ab2029a091a88a3b1968c55468b8c91ae1e6a2d.zip |
Merge branch 'gawk-4.1-stable'
Diffstat (limited to 'debug.c')
-rw-r--r-- | debug.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -3658,8 +3658,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) |