]> granicus.if.org Git - php/commitdiff
phpdbg next command must stop when leaving function
authorBob Weinand <bobwei9@hotmail.com>
Fri, 23 Sep 2016 01:29:37 +0000 (03:29 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Fri, 23 Sep 2016 01:29:37 +0000 (03:29 +0200)
NEWS
sapi/phpdbg/phpdbg_prompt.c
sapi/phpdbg/tests/next_001.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index b16eb2d2274f2bf37b057d97988665339eb405d6..e794a9814b969de535488d39f447f1f809722c4f 100644 (file)
--- 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).
index 7115d8d4727609f34fbed421775c00953df06fe9..fb935c3ca5186b4656b15da93a3bbc3000d77609 100644 (file)
@@ -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 (file)
index 0000000..3c92ceb
--- /dev/null
@@ -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--
+<?php
+
+function foo() {
+       echo 0;
+}
+
+foo();
+echo 1;