From: Andi Gutmans Date: Tue, 7 May 2002 18:42:13 +0000 (+0000) Subject: - More debug backtrace work. It still doesn't work very well... X-Git-Tag: php-4.3.0dev-ZendEngine2-Preview1~203 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b66c89c47a7efe504df865d6c2272ee59158bbf2;p=php - More debug backtrace work. It still doesn't work very well... --- diff --git a/Zend/zend.c b/Zend/zend.c index 6c6815bd3f..188de6ef6f 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -812,6 +812,12 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co zend_file_handle *file_handle; zend_op_array *orig_op_array = EG(active_op_array); zval *local_retval=NULL; + zend_execute_data execute_data; + + EX(prev_execute_data) = NULL; + EG(current_execute_data) = &execute_data; + EX(object) = NULL; + EX(opline) = NULL; va_start(files, file_count); for (i=0; iopline->lineno; - - ptr = ptr->prev_execute_data; - + while (ptr) { if (ptr->object) { printf("%s::", Z_OBJCE(*ptr->object)->name); } - printf("%s() [%s:%d]\n", ptr->function_state.function->common.function_name, ptr->function_state.function->op_array.filename, lineno); - lineno = ptr->opline->lineno; + function_name = ptr->function_state.function->common.function_name; + if (!function_name) { + function_name = "main"; + } + ptr = ptr->prev_execute_data; + if (!ptr) { + break; + } + + filename = ptr->function_state.function->op_array.filename; + + printf("%s() [%s:%d]\n", function_name, filename, lineno); + if (ptr->opline) { + lineno = ptr->opline->lineno; + } } - - printf("main() [...:%d]\n", lineno); RETURN_TRUE; } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index d5a0b8a11f..8e523c9df4 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -195,6 +195,8 @@ typedef struct _zend_execute_data { struct _zend_execute_data *prev_execute_data; } zend_execute_data; +#define EX(element) execute_data.element + #define IS_CONST (1<<0) #define IS_TMP_VAR (1<<1) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index bd3c35c3ae..27a818f8a7 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1130,8 +1130,6 @@ static int zend_check_symbol(zval **pz TSRMLS_DC) EG(current_execute_data) = EX(prev_execute_data); \ return; -#define EX(element) execute_data.element - ZEND_API void execute(zend_op_array *op_array TSRMLS_DC) { zend_execute_data execute_data; @@ -2805,7 +2803,7 @@ send_by_ref: zend_error(E_ERROR, "Cannot delete non-existing object"); } if (Z_TYPE_PP(object) != IS_OBJECT) { - zend_error(E_ERROR, "Cannot call delete on non-object type"); + zend_error(E_ERROR, "Cannot call delete on non-object type"); } Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC); }