return SUCCESS;
} /* }}} */
+PHPDBG_HELP(eval) /* {{{ */
+{
+ printf("Access to eval() allows you to change the environment during execution, careful though !!");
+ return SUCCESS;
+} /* }}} */
+
PHPDBG_HELP(break) /* {{{ */
{
printf("doing break help: %s\n", expr);
PHPDBG_HELP(step);
PHPDBG_HELP(next);
PHPDBG_HELP(run);
+PHPDBG_HELP(eval);
PHPDBG_HELP(print);
PHPDBG_HELP(break);
PHPDBG_HELP_D(step, "stepping through execution allows inspection of the opline after every opcode"),
PHPDBG_HELP_D(next, "execute the next opcode"),
PHPDBG_HELP_D(run, "execution inside the phpdbg vm allows detailed inspection and debugging"),
+ PHPDBG_HELP_D(eval, "access to eval() allows you to affect the environment during execution"),
PHPDBG_HELP_D(print, "printing allows inspection of the execution environment"),
PHPDBG_HELP_D(break, "breakpoints allow execution interruption"),
{NULL, 0, 0}
return SUCCESS;
} else {
- printf("Nothing to execute !");
+ printf("Nothing to execute !\n");
return FAILURE;
}
} /* }}} */
+static PHPDBG_COMMAND(eval) { /* {{{ */
+ zval retval;
+
+ if (expr) {
+ if (zend_eval_stringl((char*)expr, expr_len-1, &retval, "eval()'d code" TSRMLS_CC) == SUCCESS) {
+ printf("Success\n");
+ zval_dtor(&retval);
+ }
+ } else {
+ printf("No expression provided !\n");
+ return FAILURE;
+ }
+
+ return SUCCESS;
+} /* }}} */
+
static PHPDBG_COMMAND(print) { /* {{{ */
if (!expr_len) {
printf("Showing Execution Context Information:\n");
printf("Variables\t%d\n", PHPDBG_G(ops)->last_var-1);
} else printf("Variables\tNone\n");
}
+ printf("Executing\t:%s\n", EG(in_execution) ? "yes" : "no");
+ if (EG(in_execution)) {
+ printf("VM Return\t%d\n", PHPDBG_G(vmret));
+ }
} else {
printf(
"%s\n", expr);
PHPDBG_COMMAND_D(step, "step through execution"),
PHPDBG_COMMAND_D(next, "next opcode"),
PHPDBG_COMMAND_D(run, "attempt execution"),
+ PHPDBG_COMMAND_D(eval, "evaluate some code"),
PHPDBG_COMMAND_D(print, "print something"),
PHPDBG_COMMAND_D(break, "set breakpoint"),
PHPDBG_COMMAND_D(help, "show help menu"),