30 char *arg_name =
NULL;
33 smart_str_appends(
s,
", ");
35 if (i < func->common.num_args) {
43 smart_str_appends(
s, arg_name ? arg_name :
"?");
44 smart_str_appendc(
s,
'=');
48 smart_str_appends(
s, arg_print);
59 if (op_array->
scope) {
61 smart_str_appends(&
s,
"::");
64 smart_str_appendc(&
s,
'(');
66 while (i < first_extra_arg) {
67 phpdbg_append_individual_arg(&
s, i,
ex->func,
p);
74 phpdbg_append_individual_arg(&
s, i,
ex->func,
p);
78 smart_str_appendc(&
s,
')');
81 smart_str_appends(&
s,
" at ");
83 smart_str_appendc(&
s,
':');
84 smart_str_append_unsigned(&
s,
ex->opline->lineno);
86 smart_str_appends(&
s,
" [internal function]");
140 phpdbg_error(
"Couldn't switch frames, invalid data source");
162 zend_string_release(
s);
170static void phpdbg_dump_prototype(
zval *tmp)
172 zval *funcname, *
class, class_zv, *
args, *argstmp;
196 bool is_variadic = 0;
202 arginfo =
func->common.arg_info;
206 m =
func ?
func->common.num_args : 0;
213 char *arg_name =
NULL;
227 phpdbg_out(
"%s=%s", arg_name ? arg_name :
"?", is_variadic ?
"[":
"");
251 zval startline, startfile;
252 const char *startfilename;
254 int i = 0, limit = num;
268 phpdbg_error(
"Couldn't fetch backtrace, invalid data source");
274 Z_STR(startfile) = zend_string_init(startfilename,
strlen(startfilename), 0);
282 phpdbg_dump_prototype(tmp);
287 phpdbg_dump_prototype(tmp);
306 zval_ptr_dtor_nogc(&zbacktrace);
307 zend_string_release(
Z_STR(startfile));
332 zend_string_release(
s);
file(string $filename, int $flags=0, $context=null)
PHPAPI size_t php_printf(const char *format,...)
#define phpdbg_try_access
#define phpdbg_catch_access
#define phpdbg_end_try_access()
void phpdbg_open_generator_frame(zend_generator *gen)
zend_string * phpdbg_compile_stackframe(zend_execute_data *ex)
void phpdbg_dump_backtrace(size_t num)
void phpdbg_switch_frame(int frame)
void phpdbg_restore_frame(void)
void phpdbg_print_cur_frame_info(void)
void phpdbg_list_file(zend_string *filename, uint32_t count, int offset, uint32_t highlight)
#define phpdbg_error(strfmt,...)
#define phpdbg_out(fmt,...)
#define phpdbg_notice(strfmt,...)
#define phpdbg_writeln(strfmt,...)
PHPDBG_API const zend_function * phpdbg_get_function(const char *fname, const char *cname)
char * phpdbg_short_zval_print(zval *zv, int maxlen)
#define PHPDBG_OUTPUT_BACKUP()
#define PHPDBG_OUTPUT_BACKUP_RESTORE()
zend_execute_data * prev_execute_data
zend_execute_data * execute_data
zend_execute_data * frozen_call_stack
zend_string * function_name
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options, int limit)
#define ZEND_INTERNAL_FUNCTION
#define ZEND_USER_FUNCTION
struct _zend_op_array zend_op_array
struct _zend_internal_arg_info zend_internal_arg_info
#define ZEND_CALL_NUM_ARGS(call)
#define ZEND_ARG_IS_VARIADIC(arg_info)
struct _zend_arg_info zend_arg_info
#define ZEND_CALL_VAR_NUM(call, n)
#define ZEND_CALL_ARG(call, n)
ZEND_API uint32_t zend_get_executed_lineno(void)
ZEND_API const char * zend_get_executed_filename(void)
union _zend_function zend_function
ZEND_API void zend_generator_restore_call_stack(zend_generator *generator)
ZEND_API zend_execute_data * zend_generator_freeze_call_stack(zend_execute_data *execute_data)
struct _zend_generator zend_generator
ZEND_API zend_result ZEND_FASTCALL zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos)
ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)
ZEND_API zval *ZEND_FASTCALL zend_hash_get_current_data_ex(HashTable *ht, HashPosition *pos)
ZEND_API zval *ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_VAL(ht, _val)
struct _zend_string zend_string
#define Z_STRVAL_P(zval_p)
#define Z_ARRVAL_P(zval_p)
#define Z_OBJCE_P(zval_p)
#define ZVAL_NEW_STR(z, s)
struct _zend_execute_data zend_execute_data
zend_generator * generator