Added: xdebug/trunk/tests/remote_log1.phpt =================================================================== --- xdebug/trunk/tests/remote_log1.phpt (rev 0) +++ xdebug/trunk/tests/remote_log1.phpt 2011-05-27 02:22:45 UTC (rev 3441) @@ -0,0 +1,20 @@ +--TEST-- +Test for Xdebug's remote log (can not connect, no remote callback) +--INI-- +xdebug.remote_log=/tmp/remote-log1.txt +xdebug.remote_autostart=1 +xdebug.remote_connect_back=0 +xdebug.remote_host=doesnotexist +xdebug.remote_port=9002 +--FILE-- + +--EXPECTF-- +3 +Log opened at %d-%d-%d %d:%d:%d +I: Connecting to configured address/port: doesnotexist:9002. +E: Could not connect to client. :-( +Log closed at %d-%d-%d %d:%d:%d Added: xdebug/trunk/tests/remote_log2.phpt =================================================================== --- xdebug/trunk/tests/remote_log2.phpt (rev 0) +++ xdebug/trunk/tests/remote_log2.phpt 2011-05-27 02:22:45 UTC (rev 3441) @@ -0,0 +1,21 @@ +--TEST-- +Test for Xdebug's remote log (can not connect, with not-found remote callback) +--INI-- +xdebug.remote_log=/tmp/remote-log2.txt +xdebug.remote_autostart=1 +xdebug.remote_connect_back=1 +xdebug.remote_host=doesnotexist2 +xdebug.remote_port=9003 +--FILE-- + +--EXPECTF-- +3 +Log opened at %d-%d-%d %d:%d:%d +I: Checking remote connect back address. +W: Remote address not found, connecting to configured address/port: doesnotexist2:9003. :-| +E: Could not connect to client. :-( +Log closed at %d-%d-%d %d:%d:%d Added: xdebug/trunk/tests/remote_log3.phpt =================================================================== --- xdebug/trunk/tests/remote_log3.phpt (rev 0) +++ xdebug/trunk/tests/remote_log3.phpt 2011-05-27 02:22:45 UTC (rev 3441) @@ -0,0 +1,74 @@ +--TEST-- +Test for Xdebug's remote log (can connect, without remote callback) +--FILE-- + +--EXPECTF-- + + + +-> step_into -i 1 + + + +-> breakpoint_set -i 2 -t line -n 8 + + + +-> run -i 3 + + + +-> property_get -i 4 -n param2 + + + +-> property_get -i 5 -n param3 + + + +-> detach -i 6 + + + +Log opened at %d-%d-%d %d:%d:%d +I: Connecting to configured address/port: localhost:9991. +I: Connected to client. +-> %s + +<- step_into -i 1 +I: The debug session is succesfully initiated! :-) +-> %s + +<- breakpoint_set -i 2 -t line -n 8 +-> %s + +<- run -i 3 +-> %s + +<- property_get -i 4 -n param2 +-> %s + +<- property_get -i 5 -n param3 +-> %s + +<- detach -i 6 +-> %s + +Log closed at %d-%d-%d %d:%d:%d Modified: xdebug/trunk/usefulstuff.c =================================================================== --- xdebug/trunk/usefulstuff.c 2011-05-02 17:49:34 UTC (rev 3440) +++ xdebug/trunk/usefulstuff.c 2011-05-27 02:22:45 UTC (rev 3441) @@ -40,6 +40,8 @@ #include "ext/standard/flock_compat.h" #include "main/php_ini.h" +ZEND_EXTERN_MODULE_GLOBALS(xdebug) + #define READ_BUFFER_SIZE 128 char* xdebug_fd_read_line_delim(int socket, fd_buf *context, int type, unsigned char delim, int *length) @@ -640,3 +642,30 @@ return fname.l; } + +void xdebug_open_log(TSRMLS_D) +{ + /* initialize remote log file */ + XG(remote_log_file) = NULL; + if (XG(remote_log) && strlen(XG(remote_log))) { + XG(remote_log_file) = xdebug_fopen(XG(remote_log), "a", NULL, NULL); + } + if (XG(remote_log_file)) { + char *timestr = xdebug_get_time(); + fprintf(XG(remote_log_file), "Log opened at %s\n", timestr); + fflush(XG(remote_log_file)); + xdfree(timestr); + } +} + +void xdebug_close_log(TSRMLS_D) +{ + if (XG(remote_log_file)) { + char *timestr = xdebug_get_time(); + fprintf(XG(remote_log_file), "Log closed at %s\n\n", timestr); + fflush(XG(remote_log_file)); + xdfree(timestr); + fclose(XG(remote_log_file)); + XG(remote_log_file) = NULL; + } +} Modified: xdebug/trunk/xdebug_handler_dbgp.c =================================================================== --- xdebug/trunk/xdebug_handler_dbgp.c 2011-05-02 17:49:34 UTC (rev 3440) +++ xdebug/trunk/xdebug_handler_dbgp.c 2011-05-27 02:22:45 UTC (rev 3441) @@ -2349,18 +2349,6 @@ XG(stdio).php_header_write = NULL; #endif - /* initialize remote log file */ - XG(remote_log_file) = NULL; - if (XG(remote_log) && strlen(XG(remote_log))) { - XG(remote_log_file) = xdebug_fopen(XG(remote_log), "a", NULL, NULL); - } - if (XG(remote_log_file)) { - char *timestr = xdebug_get_time(); - fprintf(XG(remote_log_file), "Log opened at %s\n", timestr); - fflush(XG(remote_log_file)); - xdfree(timestr); - } - response = xdebug_xml_node_init("init"); xdebug_xml_add_attribute(response, "xmlns", "urn:debugger_protocol_v1"); xdebug_xml_add_attribute(response, "xmlns:xdebug", "http://xdebug.org/dbgp/xdebug"); @@ -2479,14 +2467,7 @@ xdfree(context->buffer); } - if (XG(remote_log_file)) { - char *timestr = xdebug_get_time(); - fprintf(XG(remote_log_file), "Log closed at %s\n\n", timestr); - fflush(XG(remote_log_file)); - xdfree(timestr); - fclose(XG(remote_log_file)); - XG(remote_log_file) = NULL; - } + xdebug_close_log(TSRMLS_C); XG(remote_enabled) = 0; return 1; } Modified: xdebug/trunk/xdebug_stack.c =================================================================== --- xdebug/trunk/xdebug_stack.c 2011-05-02 17:49:34 UTC (rev 3440) +++ xdebug/trunk/xdebug_stack.c 2011-05-27 02:22:45 UTC (rev 3441) @@ -444,33 +444,46 @@ void xdebug_init_debugger(TSRMLS_D) { + xdebug_open_log(TSRMLS_C); if (XG(remote_connect_back)) { zval **remote_addr = NULL; + fprintf(XG(remote_log_file), "I: Checking remote connect back address.\n"); if (zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "X_HTTP_FORWARDED_FOR", 21, (void**)&remote_addr) == FAILURE) { zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "REMOTE_ADDR", 12, (void**)&remote_addr); } if (remote_addr) { + fprintf(XG(remote_log_file), "I: Remote address found, connecting to %s:%d.\n", Z_STRVAL_PP(remote_addr), XG(remote_port)); XG(context).socket = xdebug_create_socket(Z_STRVAL_PP(remote_addr), XG(remote_port)); } else { + fprintf(XG(remote_log_file), "W: Remote address not found, connecting to configured address/port: %s:%d. :-|\n", XG(remote_host), XG(remote_port)); XG(context).socket = xdebug_create_socket(XG(remote_host), XG(remote_port)); } } else { + fprintf(XG(remote_log_file), "I: Connecting to configured address/port: %s:%d.\n", XG(remote_host), XG(remote_port)); XG(context).socket = xdebug_create_socket(XG(remote_host), XG(remote_port)); } if (XG(context).socket >= 0) { + fprintf(XG(remote_log_file), "I: Connected to client. :-)\n"); XG(remote_enabled) = 0; /* Get handler from mode */ XG(context).handler = xdebug_handler_get(XG(remote_handler)); if (!XG(context).handler) { zend_error(E_WARNING, "The remote debug handler '%s' is not supported.", XG(remote_handler)); + fprintf(XG(remote_log_file), "E: The remote debug handler '%s' is not supported. :-(\n", XG(remote_handler)); } else if (!XG(context).handler->remote_init(&(XG(context)), XDEBUG_REQ)) { /* The request could not be started, ignore it then */ + fprintf(XG(remote_log_file), "E: The debug session could not be started. :-(\n"); } else { /* All is well, turn off script time outs */ XG(remote_enabled) = 1; } + } else { + fprintf(XG(remote_log_file), "E: Could not connect to client. :-(\n"); } + if (!XG(remote_enabled)) { + xdebug_close_log(TSRMLS_C); + } } void xdebug_do_jit(TSRMLS_D)