}
zend_hash_destroy(&classes);
-
+
return SUCCESS;
} /* }}} */
-
-
+
+PHPDBG_INFO(funcs) /* {{{ */
+{
+ HashPosition position;
+ zend_function *zf, **pzf;
+ HashTable functions;
+
+ zend_hash_init(&functions, 8, NULL, NULL, 0);
+
+ for (zend_hash_internal_pointer_reset_ex(EG(function_table), &position);
+ zend_hash_get_current_data_ex(EG(function_table), (void**)&zf, &position) == SUCCESS;
+ zend_hash_move_forward_ex(EG(function_table), &position)) {
+
+ if (zf->type == ZEND_USER_FUNCTION) {
+ zend_hash_next_index_insert(
+ &functions, (void**) &zf, sizeof(zend_function), NULL);
+ }
+ }
+
+ phpdbg_notice("User Functions (%d)",
+ zend_hash_num_elements(&functions));
+
+ for (zend_hash_internal_pointer_reset_ex(&functions, &position);
+ zend_hash_get_current_data_ex(&functions, (void**)&pzf, &position) == SUCCESS;
+ zend_hash_move_forward_ex(&functions, &position)) {
+ zend_op_array *op_array = &((*pzf)->op_array);
+
+ phpdbg_writeln(
+ "|-------- %s in %s on line %d",
+ op_array->function_name ? op_array->function_name : "{main}",
+ op_array->filename ? op_array->filename : "(no source code)",
+ op_array->line_start);
+ }
+
+ zend_hash_destroy(&functions);
+
+ return SUCCESS;
+} /* }}} */
PHPDBG_INFO(files);
PHPDBG_INFO(classes);
+PHPDBG_INFO(funcs);
+ PHPDBG_INFO(error);
+ PHPDBG_INFO(vars);
static const phpdbg_command_t phpdbg_info_commands[] = {
- PHPDBG_INFO_EX_D(files, "lists included files", 'F'),
- PHPDBG_INFO_EX_D(classes, "lists loaded user classes", 'c'),
- PHPDBG_INFO_EX_D(funcs, "lists loaded user functions", 'f'),
+ PHPDBG_INFO_EX_D(files, "lists included files", 'F'),
+ PHPDBG_INFO_EX_D(classes, "lists loaded classes", 'c'),
++ PHPDBG_INFO_EX_D(funcs, "lists loaded classes", 'f'),
+ PHPDBG_INFO_EX_D(error, "show the last error", 'e'),
+ PHPDBG_INFO_EX_D(vars, "show active variables", 'v'),
PHPDBG_END_COMAND
};