4343#include "phpdbg_eol.h"
4444
4545ZEND_EXTERN_MODULE_GLOBALS (phpdbg );
46+ ZEND_EXTERN_MODULE_GLOBALS (output );
4647
4748#ifdef HAVE_LIBDL
4849#ifdef PHP_WIN32
@@ -645,12 +646,21 @@ PHPDBG_COMMAND(ev) /* {{{ */
645646 zend_bool stepping = ((PHPDBG_G (flags ) & PHPDBG_IS_STEPPING ) == PHPDBG_IS_STEPPING );
646647 zval retval ;
647648
649+ zend_execute_data * original_execute_data = EG (current_execute_data );
650+ zend_class_entry * original_scope = EG (scope );
651+ zend_vm_stack original_stack = EG (vm_stack );
652+ original_stack -> top = EG (vm_stack_top );
653+
654+ PHPDBG_OUTPUT_BACKUP ();
655+
648656 if (PHPDBG_G (flags ) & PHPDBG_IN_SIGNAL_HANDLER ) {
649657 phpdbg_try_access {
650658 phpdbg_parse_variable (param -> str , param -> len , & EG (symbol_table ).ht , 0 , phpdbg_output_ev_variable , 0 TSRMLS_CC );
651659 } phpdbg_catch_access {
652660 phpdbg_error ("signalsegv" , "" , "Could not fetch data, invalid data source" );
653661 } phpdbg_end_try_access ();
662+
663+ PHPDBG_OUTPUT_BACKUP_RESTORE ();
654664 return SUCCESS ;
655665 }
656666
@@ -672,6 +682,12 @@ PHPDBG_COMMAND(ev) /* {{{ */
672682 phpdbg_out ("\n" );
673683 zval_ptr_dtor (& retval );
674684 }
685+ } zend_catch {
686+ EG (current_execute_data ) = original_execute_data ;
687+ EG (scope ) = original_scope ;
688+ EG (vm_stack_top ) = original_stack -> top ;
689+ EG (vm_stack_end ) = original_stack -> end ;
690+ EG (vm_stack ) = original_stack ;
675691 } zend_end_try ();
676692 PHPDBG_G (flags ) &= ~PHPDBG_IN_EVAL ;
677693
@@ -682,6 +698,8 @@ PHPDBG_COMMAND(ev) /* {{{ */
682698
683699 CG (unclean_shutdown ) = 0 ;
684700
701+ PHPDBG_OUTPUT_BACKUP_RESTORE ();
702+
685703 return SUCCESS ;
686704} /* }}} */
687705
0 commit comments