From: Bob Weinand Date: Fri, 23 Sep 2016 01:29:37 +0000 (+0200) Subject: phpdbg next command must stop when leaving function X-Git-Tag: php-7.0.12RC1~25 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cf35dae6e22da6b06d130630abd024e285939a2e;p=php phpdbg next command must stop when leaving function --- diff --git a/NEWS b/NEWS index b16eb2d227..e794a9814b 100644 --- a/NEWS +++ b/NEWS @@ -60,6 +60,7 @@ PHP NEWS - phpdbg: . Fixed bug #72996 (phpdbg_prompt.c undefined reference to DL_LOAD). (Nikita) + . Fixed next command not stopping when leaving function. (Bob) - Session: . Fixed bug #68015 (Session does not report invalid uid for files save handler). diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c index 7115d8d472..fb935c3ca5 100644 --- a/sapi/phpdbg/phpdbg_prompt.c +++ b/sapi/phpdbg/phpdbg_prompt.c @@ -1541,12 +1541,18 @@ ex_is_caught: goto next; } + /* not while in conditionals */ + phpdbg_print_opline_ex(execute_data, 0); + /* perform seek operation */ if ((PHPDBG_G(flags) & PHPDBG_SEEK_MASK) && !(PHPDBG_G(flags) & PHPDBG_IN_EVAL)) { /* current address */ zend_ulong address = (zend_ulong) execute_data->opline; if (PHPDBG_G(seek_ex) != execute_data) { + if (PHPDBG_G(flags) & PHPDBG_IS_STEPPING) { + goto stepping; + } goto next; } @@ -1590,10 +1596,8 @@ ex_is_caught: } } - /* not while in conditionals */ - phpdbg_print_opline_ex(execute_data, 0); - if (PHPDBG_G(flags) & PHPDBG_IS_STEPPING && (PHPDBG_G(flags) & PHPDBG_STEP_OPCODE || execute_data->opline->lineno != PHPDBG_G(last_line))) { +stepping: PHPDBG_G(flags) &= ~PHPDBG_IS_STEPPING; DO_INTERACTIVE(1); } diff --git a/sapi/phpdbg/tests/next_001.phpt b/sapi/phpdbg/tests/next_001.phpt new file mode 100644 index 0000000000..3c92cebbdb --- /dev/null +++ b/sapi/phpdbg/tests/next_001.phpt @@ -0,0 +1,37 @@ +--TEST-- +Test next command on function boundaries +--PHPDBG-- +b 4 +r +n + + +q +--EXPECTF-- +[Successful compilation of %s] +prompt> [Breakpoint #0 added at %s:4] +prompt> [Breakpoint #0 at %s:4, hits: 1] +>00004: echo 0; + 00005: } + 00006: +prompt> 0 +[L5 %s RETURN null %s] +>00005: } + 00006: + 00007: foo(); +prompt> [L8 %s ECHO 1 %s] +>00008: echo 1; + 00009: +prompt> 1 +[L8 %s RETURN 1 %s] +[Script ended normally] +prompt> +--FILE-- +