mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Merge branch 'phpdbg' into PHP-5.6
This commit is contained in:
commit
8ff4d61f08
@ -653,8 +653,11 @@ static inline void phpdbg_sigint_handler(int signo) /* {{{ */
|
||||
PHPDBG_G(flags) |= PHPDBG_IS_SIGNALED;
|
||||
}
|
||||
} else {
|
||||
PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
|
||||
zend_bailout();
|
||||
/* we quit remote consoles on recv SIGINT */
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) {
|
||||
PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
|
||||
zend_bailout();
|
||||
}
|
||||
}
|
||||
} /* }}} */
|
||||
|
||||
@ -1198,17 +1201,17 @@ phpdbg_main:
|
||||
} zend_end_try();
|
||||
|
||||
/* initialize from file */
|
||||
PHPDBG_G(flags) |= PHPDBG_IS_INITIALIZING;
|
||||
zend_try {
|
||||
PHPDBG_G(flags) |= PHPDBG_IS_INITIALIZING;
|
||||
phpdbg_init(init_file, init_file_len, init_file_default TSRMLS_CC);
|
||||
phpdbg_try_file_init(bp_tmp_file, strlen(bp_tmp_file), 0 TSRMLS_CC);
|
||||
PHPDBG_G(flags) &= ~PHPDBG_IS_INITIALIZING;
|
||||
} zend_catch {
|
||||
PHPDBG_G(flags) &= ~PHPDBG_IS_INITIALIZING;
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_QUITTING) {
|
||||
goto phpdbg_out;
|
||||
}
|
||||
} zend_end_try();
|
||||
PHPDBG_G(flags) &= ~PHPDBG_IS_INITIALIZING;
|
||||
|
||||
/* quit if init says so */
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_QUITTING) {
|
||||
goto phpdbg_out;
|
||||
}
|
||||
|
||||
/* step from here, not through init */
|
||||
if (step) {
|
||||
@ -1235,39 +1238,46 @@ phpdbg_interact:
|
||||
phpdbg_export_breakpoints(bp_tmp_fp TSRMLS_CC);
|
||||
fclose(bp_tmp_fp);
|
||||
cleaning = 1;
|
||||
goto phpdbg_out;
|
||||
} else {
|
||||
cleaning = 0;
|
||||
}
|
||||
#ifndef _WIN32
|
||||
/* remote client disconnected */
|
||||
if ((PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED)) {
|
||||
|
||||
/* renegociate connections */
|
||||
phpdbg_open_sockets(
|
||||
address, listen, &server, &socket, streams);
|
||||
#ifndef _WIN32
|
||||
if (!cleaning) {
|
||||
/* remote client disconnected */
|
||||
if ((PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED)) {
|
||||
|
||||
/* set streams */
|
||||
if (streams[0] && streams[1]) {
|
||||
PHPDBG_G(flags) &= ~PHPDBG_IS_QUITTING;
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) {
|
||||
/* renegociate connections */
|
||||
phpdbg_open_sockets(
|
||||
address, listen, &server, &socket, streams);
|
||||
|
||||
/* set streams */
|
||||
if (streams[0] && streams[1]) {
|
||||
PHPDBG_G(flags) &= ~PHPDBG_IS_QUITTING;
|
||||
}
|
||||
|
||||
/* this must be forced */
|
||||
CG(unclean_shutdown) = 0;
|
||||
} else {
|
||||
/* local consoles cannot disconnect, ignore EOF */
|
||||
PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED;
|
||||
}
|
||||
}
|
||||
|
||||
/* this must be forced */
|
||||
CG(unclean_shutdown) = 0;
|
||||
}
|
||||
#endif
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_QUITTING) {
|
||||
goto phpdbg_out;
|
||||
}
|
||||
} zend_end_try();
|
||||
} while(!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING));
|
||||
} while(!cleaning && !(PHPDBG_G(flags) & PHPDBG_IS_QUITTING));
|
||||
|
||||
/* this must be forced */
|
||||
CG(unclean_shutdown) = 0;
|
||||
|
||||
/* this is just helpful */
|
||||
PG(report_memleaks) = 0;
|
||||
|
||||
phpdbg_out:
|
||||
#ifndef _WIN32
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED) {
|
||||
if ((PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED)) {
|
||||
PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED;
|
||||
goto phpdbg_interact;
|
||||
}
|
||||
@ -1316,7 +1326,7 @@ phpdbg_out:
|
||||
if (cleaning || remote) {
|
||||
goto phpdbg_main;
|
||||
}
|
||||
|
||||
|
||||
#ifdef ZTS
|
||||
/* bugggy */
|
||||
/* tsrm_shutdown(); */
|
||||
|
@ -149,7 +149,7 @@
|
||||
#define PHPDBG_AUTHORS "Felipe Pena, Joe Watkins and Bob Weinand" /* Ordered by last name */
|
||||
#define PHPDBG_URL "http://phpdbg.com"
|
||||
#define PHPDBG_ISSUES "http://github.com/krakjoe/phpdbg/issues"
|
||||
#define PHPDBG_VERSION "0.3.0"
|
||||
#define PHPDBG_VERSION "0.3.1"
|
||||
#define PHPDBG_INIT_FILENAME ".phpdbginit"
|
||||
/* }}} */
|
||||
|
||||
|
@ -467,32 +467,43 @@ PHPDBG_API phpdbg_input_t *phpdbg_read_input(char *buffered TSRMLS_DC) /* {{{ */
|
||||
}
|
||||
|
||||
if (buffered == NULL) {
|
||||
#ifndef HAVE_LIBREADLINE
|
||||
char buf[PHPDBG_MAX_CMD];
|
||||
if ((!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE) && !phpdbg_write(phpdbg_get_prompt(TSRMLS_C))) ||
|
||||
!fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
|
||||
/* the user has gone away */
|
||||
phpdbg_error("Failed to read console!");
|
||||
disconnect:
|
||||
if (0) {
|
||||
PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED);
|
||||
zend_bailout();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef HAVE_LIBREADLINE
|
||||
char buf[PHPDBG_MAX_CMD];
|
||||
if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
|
||||
if (!phpdbg_write(phpdbg_get_prompt(TSRMLS_C))) {
|
||||
goto disconnect;
|
||||
}
|
||||
}
|
||||
|
||||
/* note: EOF is ignored */
|
||||
readline:
|
||||
if (!fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
|
||||
/* the user has gone away */
|
||||
if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
|
||||
goto disconnect;
|
||||
} else goto readline;
|
||||
}
|
||||
|
||||
cmd = buf;
|
||||
#else
|
||||
/* note: EOF makes readline write prompt again in local console mode */
|
||||
readline:
|
||||
if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
|
||||
char buf[PHPDBG_MAX_CMD];
|
||||
if (fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
|
||||
cmd = buf;
|
||||
} else cmd = NULL;
|
||||
} else goto disconnect;
|
||||
} else cmd = readline(phpdbg_get_prompt(TSRMLS_C));
|
||||
|
||||
if (!cmd) {
|
||||
/* the user has gone away */
|
||||
phpdbg_error("Failed to read console!");
|
||||
PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED);
|
||||
zend_bailout();
|
||||
return NULL;
|
||||
goto readline;
|
||||
}
|
||||
|
||||
if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
|
||||
|
@ -52,13 +52,15 @@ static inline char *phpdbg_decode_op(zend_op_array *ops, znode_op *op, zend_uint
|
||||
case IS_VAR:
|
||||
case IS_TMP_VAR: {
|
||||
zend_ulong id = 0, *pid = NULL;
|
||||
if (zend_hash_index_find(vars, (zend_ulong) ops->vars - op->var, (void**) &pid) != SUCCESS) {
|
||||
id = zend_hash_num_elements(vars);
|
||||
zend_hash_index_update(
|
||||
vars, (zend_ulong) ops->vars - op->var,
|
||||
(void**) &id,
|
||||
sizeof(zend_ulong), NULL);
|
||||
} else id = *pid;
|
||||
if (vars != NULL) {
|
||||
if (zend_hash_index_find(vars, (zend_ulong) ops->vars - op->var, (void**) &pid) != SUCCESS) {
|
||||
id = zend_hash_num_elements(vars);
|
||||
zend_hash_index_update(
|
||||
vars, (zend_ulong) ops->vars - op->var,
|
||||
(void**) &id,
|
||||
sizeof(zend_ulong), NULL);
|
||||
} else id = *pid;
|
||||
}
|
||||
asprintf(&decode, "@%lu", id);
|
||||
} break;
|
||||
|
||||
|
@ -551,7 +551,8 @@ PHPDBG_COMMAND(run) /* {{{ */
|
||||
zend_op **orig_opline = EG(opline_ptr);
|
||||
zend_op_array *orig_op_array = EG(active_op_array);
|
||||
zval **orig_retval_ptr = EG(return_value_ptr_ptr);
|
||||
|
||||
zend_bool restore = 1;
|
||||
|
||||
if (!PHPDBG_G(ops)) {
|
||||
if (phpdbg_compile(TSRMLS_C) == FAILURE) {
|
||||
phpdbg_error("Failed to compile %s, cannot run", PHPDBG_G(exec));
|
||||
@ -586,18 +587,19 @@ PHPDBG_COMMAND(run) /* {{{ */
|
||||
|
||||
if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
|
||||
phpdbg_error("Caught exit/error from VM");
|
||||
goto out;
|
||||
restore = 0;
|
||||
}
|
||||
} zend_end_try();
|
||||
|
||||
if (EG(exception)) {
|
||||
phpdbg_handle_exception(TSRMLS_C);
|
||||
if (restore) {
|
||||
if (EG(exception)) {
|
||||
phpdbg_handle_exception(TSRMLS_C);
|
||||
}
|
||||
|
||||
EG(active_op_array) = orig_op_array;
|
||||
EG(opline_ptr) = orig_opline;
|
||||
EG(return_value_ptr_ptr) = orig_retval_ptr;
|
||||
}
|
||||
|
||||
EG(active_op_array) = orig_op_array;
|
||||
EG(opline_ptr) = orig_opline;
|
||||
EG(return_value_ptr_ptr) = orig_retval_ptr;
|
||||
|
||||
} else {
|
||||
phpdbg_error("Nothing to execute!");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user