From e1cc814ec467ab15211a7d2362f461b6b7ece597 Mon Sep 17 00:00:00 2001 From: Yuhei Okazaki Date: Sun, 22 Nov 2015 21:46:37 +0900 Subject: add next command to mrdb. --- mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c | 7 +++++++ mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 15 ++++++++++++++- mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c index 7e0f171e4..37d3f2101 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c @@ -52,3 +52,10 @@ dbgcmd_step(mrb_state *mrb, mrdb_state *mrdb) mrdb->dbg->xm = DBG_STEP; return DBGST_CONTINUE; } + +dbgcmd_state +dbgcmd_next(mrb_state *mrb, mrdb_state *mrdb) +{ + mrdb->dbg->xm = DBG_NEXT; + return DBGST_CONTINUE; +} 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; diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h index 5d897170a..5ac12c1cd 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h @@ -109,6 +109,7 @@ typedef struct mrb_debug_context { const char *prvfile; int32_t prvline; + mrb_callinfo *prvci; mrdb_exemode xm; mrdb_exephase xphase; @@ -146,6 +147,7 @@ typedef dbgcmd_state (*debug_command_func)(mrb_state*, mrdb_state*); dbgcmd_state dbgcmd_run(mrb_state*, mrdb_state*); dbgcmd_state dbgcmd_continue(mrb_state*, mrdb_state*); dbgcmd_state dbgcmd_step(mrb_state*, mrdb_state*); +dbgcmd_state dbgcmd_next(mrb_state*, mrdb_state*); /* cmdbreak.c */ dbgcmd_state dbgcmd_break(mrb_state*, mrdb_state*); dbgcmd_state dbgcmd_info_break(mrb_state*, mrdb_state*); -- cgit v1.2.3 From a08439a7c0e2fecb55b0bfa48df18bcf90eccc53 Mon Sep 17 00:00:00 2001 From: Yuhei Okazaki Date: Sat, 5 Dec 2015 23:02:38 +0900 Subject: fixed next command's comment. --- mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index 09875d458..45e0b51d8 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -57,7 +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] */ + {"next", NULL, 1, 0, 1, DBGCMD_NEXT, dbgcmd_next}, /* n[ext] */ {NULL} }; -- cgit v1.2.3 From 887a56ba806f64478bc63a8cc4327334f4f42201 Mon Sep 17 00:00:00 2001 From: Yuhei Okazaki Date: Sat, 5 Dec 2015 23:21:19 +0900 Subject: fix bug that doesn't stop program when execute next command. --- mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c | 1 + mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c index 37d3f2101..2030c08b6 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c @@ -57,5 +57,6 @@ dbgcmd_state dbgcmd_next(mrb_state *mrb, mrdb_state *mrdb) { mrdb->dbg->xm = DBG_NEXT; + mrdb->dbg->prvci = mrb->c->ci; return DBGST_CONTINUE; } diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index 45e0b51d8..a5cf3be54 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -585,6 +585,7 @@ mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *reg if((uint32_t)(dbg->prvci) < (uint32_t)(mrb->c->ci)) { return; } + dbg->prvci = NULL; dbg->method_bpno = 0; dbg->bm = BRK_NEXT; break; @@ -606,7 +607,6 @@ 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; -- cgit v1.2.3