Check out APD (http://apc.communityconnect.com/apd-cvs.tar.gz).  It does 
what you're looking for as an engine extension.

George

On Sunday, September 2, 2001, at 09:53 PM, Yasuo Ohgaki wrote:

> Yasuo Ohgaki wrote:
>
>> Is it feasible to add trace log option that enables logging 
>> function/class method names called? (At least for debug enabled PHP?)
>
> I'm lazy to add trace log calls in functins in PHP script. It seems 
> relatively easy to add function call trace log. This is quick and dirty 
> version. (Not for production)
>
> Please be nice. I've never read Zend code nor understand Zend API. And 
> I spent about an hour to made these changes.
>
> I hope someone knows well Zend implements function call trace feature :)
>
> --
> Yasuo Ohgaki
>
>
> Index: zend.c
> ===================================================================
> RCS file: /repository/Zend/zend.c,v
> retrieving revision 1.139
> diff -u -c -r1.139 zend.c
> cvs server: conflicting specifications of output style
> *** zend.c    2001/08/31 22:14:27     1.139
> --- zend.c    2001/09/03 01:41:56
> ***************
> *** 623,628 ****
> --- 623,662 ----
>       }
>   }
>
> + #define ZEND_TRACE_BUFFER_SIZE 512
> +
> + /* quick & dirty hack. Should be modfied */
> + void zend_trace()
> + {
> +     char *trace_functionname;
> +     char *trace_filename;
> +     uint trace_lineno;
> +     char msg_buf[ZEND_TRACE_BUFFER_SIZE];
> +     FILE *fp;
> +
> +     /* Need to be changed so that file name can be set in php.ini */
> +     const char *log_filename = "/tmp/php_function_trace";
> +
> +     TSRMLS_FETCH();
> +
> +     trace_functionname = get_active_function_name(TSRMLS_C);
> +     trace_filename = zend_get_executed_filename(TSRMLS_C);
> +     trace_lineno = zend_get_executed_lineno(TSRMLS_C);
> +     if (!trace_functionname || !trace_filename || !trace_lineno) {
> +             zend_error(E_ERROR, "Something wrong in function trace. 
> Please report this as a bug.\n");
> +     }
> +     snprintf(msg_buf, ZEND_TRACE_BUFFER_SIZE, "%s(%d), %s() 
> called.\n", trace_filename, trace_lineno, trace_functionname);
> +
> +     /* Openning file every call is ineffient. Should be fixed */
> +     fp= fopen(log_filename, "a+");
> +     if (!fp) {
> +             zend_error(E_WARNING,"Trace log file. Open failed.\n");
> +     }
> +     else {
> +             fputs(msg_buf, fp);
> +             fclose(fp);
> +     }
> + }
>
>   #define ZEND_ERROR_BUFFER_SIZE 1024
>
>
>
> Index: zend.h
> ===================================================================
> RCS file: /repository/Zend/zend.h,v
> retrieving revision 1.139
> diff -u -c -r1.139 zend.h
> cvs server: conflicting specifications of output style
> *** zend.h    2001/08/26 15:28:05     1.139
> --- zend.h    2001/09/03 01:42:59
> ***************
> *** 378,383 ****
> --- 378,384 ----
>   extern ZEND_API void (*zend_ticks_function)(int ticks);
>   extern ZEND_API void (*zend_error_cb)(int type, const char 
> *error_filename, const uint error_lineno, const char *format, va_list 
> args);
>
> + void zend_trace(void);
>
>   ZEND_API void zend_error(int type, const char *format, ...);
>
>
>
> Index: zend_execute.c
> ===================================================================
> RCS file: /repository/Zend/zend_execute.c,v
> retrieving revision 1.285
> diff -u -c -r1.285 zend_execute.c
> cvs server: conflicting specifications of output style
> *** zend_execute.c    2001/08/30 12:06:05     1.285
> --- zend_execute.c    2001/09/03 01:43:33
> ***************
> *** 1627,1632 ****
> --- 1627,1633 ----
>                                       EG(return_value_ptr_ptr) = 
> Ts[opline->result.u.var].var.ptr_ptr;
>                                       EG(active_op_array) = (zend_op_array *) 
> function_state.function;
>
> +                                     zend_trace(); /* function call trace for 
>debugging script */
>                                       zend_execute(EG(active_op_array) TSRMLS_CC);
>
>                                       if (return_value_used && 
>!Ts[opline->result.u.var].var.ptr) {
>
>
> -- PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> To contact the list administrators, e-mail: [EMAIL PROTECTED]
>

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to