switch (method->type) {
case ZEND_USER_FUNCTION: {
zend_op_array* op_array = &(method->op_array);
-
+ HashTable vars;
+
if (op_array) {
zend_op *opline = &(op_array->opcodes[0]);
zend_uint opcode = 0,
op_array->filename ? op_array->filename : "unknown");
}
-
+ zend_hash_init(&vars, op_array->last, NULL, NULL, 0);
do {
- const char *decode = phpdbg_decode_opcode(opline->opcode);
+ char *decode = phpdbg_decode_opline(op_array, opline, &vars TSRMLS_CC);
if (decode != NULL) {
phpdbg_writeln(
- "\t\t#%lu\t%p %s", opline->lineno, opline, decode);
+ "\t\t#%lu\t%p %-30s %s",
+ opline->lineno,
+ opline,
+ phpdbg_decode_opcode(opline->opcode),
+ decode);
} else phpdbg_error("\tFailed to decode opline @ %ld", opline);
-
+ free(decode);
opline++;
} while (++opcode < end);
+ zend_hash_destroy(&vars);
}
} break;
return decode;
} /* }}} */
-static inline char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRMLS_DC) /*{{{ */
+char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRMLS_DC) /*{{{ */
{
char *decode[3];
void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TSRMLS_DC);
int phpdbg_interactive(TSRMLS_D);
void phpdbg_print_opline(zend_execute_data *execute_data, zend_bool ignore_flags TSRMLS_DC);
+char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRMLS_DC);
int phpdbg_compile(TSRMLS_D);
void phpdbg_clean(zend_bool full TSRMLS_DC);
void phpdbg_sigint_handler(int signo);