diff options
| author | Yuhei Okazaki <[email protected]> | 2015-11-22 21:46:37 +0900 |
|---|---|---|
| committer | Yuhei Okazaki <[email protected]> | 2015-12-23 22:16:36 +0900 |
| commit | e1cc814ec467ab15211a7d2362f461b6b7ece597 (patch) | |
| tree | e298336f39468360665da776fdf44c2b44f1b3b0 /mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | |
| parent | 7e4a7abf5f2396acc1eb302da75f79b296aa3b31 (diff) | |
| download | mruby-e1cc814ec467ab15211a7d2362f461b6b7ece597.tar.gz mruby-e1cc814ec467ab15211a7d2362f461b6b7ece597.zip | |
add next command to mrdb.
Diffstat (limited to 'mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c')
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index 317547d86..09875d458 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -57,6 +57,7 @@ static const debug_command debug_command_list[] = { {"quit", NULL, 1, 0, 0, DBGCMD_QUIT, dbgcmd_quit}, /* q[uit] */ {"run", NULL, 1, 0, 0, DBGCMD_RUN, dbgcmd_run}, /* r[un] */ {"step", NULL, 1, 0, 1, DBGCMD_STEP, dbgcmd_step}, /* s[tep] */ + {"next", NULL, 1, 0, 1, DBGCMD_NEXT, dbgcmd_next}, /* s[tep] */ {NULL} }; @@ -560,6 +561,7 @@ mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *reg dbg->root_irep = irep; dbg->prvfile = NULL; dbg->prvline = 0; + dbg->prvci = NULL; dbg->xm = DBG_RUN; dbg->xphase = DBG_PHASE_RUNNING; } @@ -569,7 +571,6 @@ mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *reg switch (dbg->xm) { case DBG_STEP: - case DBG_NEXT: // temporary if (!file || (dbg->prvfile == file && dbg->prvline == line)) { return; } @@ -577,6 +578,17 @@ mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *reg dbg->bm = BRK_STEP; break; + case DBG_NEXT: + if (!file || (dbg->prvfile == file && dbg->prvline == line)) { + return; + } + if((uint32_t)(dbg->prvci) < (uint32_t)(mrb->c->ci)) { + return; + } + dbg->method_bpno = 0; + dbg->bm = BRK_NEXT; + break; + case DBG_RUN: bpno = check_method_breakpoint(mrb, irep, pc, regs); if (bpno > 0) { @@ -594,6 +606,7 @@ mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *reg } dbg->prvfile = file; dbg->prvline = line; + dbg->prvci = mrb->c->ci; return; case DBG_INIT: dbg->root_irep = irep; |
