From: krakjoe Date: Wed, 4 Dec 2013 14:20:13 +0000 (+0000) Subject: fix #36 add more info to conditional breakpoint output X-Git-Tag: php-5.6.0alpha1~110^2~29^2~29 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1fb67f1eda02eaad3867fb942e3372edcf17310e;p=php fix #36 add more info to conditional breakpoint output --- diff --git a/phpdbg_bp.c b/phpdbg_bp.c index bf6ef821c5..58e0d8a6cf 100644 --- a/phpdbg_bp.c +++ b/phpdbg_bp.c @@ -907,12 +907,26 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /* } break; case PHPDBG_BREAK_COND: { - phpdbg_notice("Conditional breakpoint #%d: (%s) %s:%u, hits: %lu", - ((phpdbg_breakcond_t*)brake)->id, - ((phpdbg_breakcond_t*)brake)->code, - zend_get_executed_filename(TSRMLS_C), - zend_get_executed_lineno(TSRMLS_C), - ((phpdbg_breakcond_t*)brake)->hits); + if (((phpdbg_breakcond_t*)brake)->paramed) { + char *param; + phpdbg_notice("Conditional breakpoint #%d: at %s if %s %s:%u, hits: %lu", + ((phpdbg_breakcond_t*)brake)->id, + phpdbg_param_tostring(&((phpdbg_breakcond_t*)brake)->param, ¶m TSRMLS_CC), + ((phpdbg_breakcond_t*)brake)->code, + zend_get_executed_filename(TSRMLS_C), + zend_get_executed_lineno(TSRMLS_C), + ((phpdbg_breakcond_t*)brake)->hits); + if (param) + free(param); + } else { + phpdbg_notice("Conditional breakpoint #%d: on %s == true %s:%u, hits: %lu", + ((phpdbg_breakcond_t*)brake)->id, + ((phpdbg_breakcond_t*)brake)->code, + zend_get_executed_filename(TSRMLS_C), + zend_get_executed_lineno(TSRMLS_C), + ((phpdbg_breakcond_t*)brake)->hits); + } + } break; default: { diff --git a/phpdbg_cmd.c b/phpdbg_cmd.c index d5db5f0a2f..543c01c6f0 100644 --- a/phpdbg_cmd.c +++ b/phpdbg_cmd.c @@ -119,6 +119,47 @@ PHPDBG_API void phpdbg_clear_param(phpdbg_param_t *param TSRMLS_DC) /* {{{ */ } /* }}} */ +PHPDBG_API char* phpdbg_param_tostring(const phpdbg_param_t *param, char **pointer TSRMLS_DC) /* {{{ */ +{ + switch (param->type) { + case STR_PARAM: + asprintf(pointer, + "%s", param->str); + break; + + case ADDR_PARAM: + asprintf(pointer, + "%#lx", param->addr); + break; + + case NUMERIC_PARAM: + asprintf(pointer, + "%li", + param->num); + break; + + case METHOD_PARAM: + asprintf(pointer, + "%s::%s", + param->method.class, + param->method.name); + break; + + case FILE_PARAM: + asprintf(pointer, + "%s:%u", + param->file.name, + param->file.line); + break; + + default: + asprintf(pointer, + "%s", "unknown"); + } + + return *pointer; +} /* }}} */ + PHPDBG_API void phpdbg_copy_param(const phpdbg_param_t* src, phpdbg_param_t* dest TSRMLS_DC) /* {{{ */ { switch ((dest->type = src->type)) { diff --git a/phpdbg_cmd.h b/phpdbg_cmd.h index f3d38d58ea..ffb1a94597 100644 --- a/phpdbg_cmd.h +++ b/phpdbg_cmd.h @@ -131,6 +131,7 @@ PHPDBG_API void phpdbg_copy_param(const phpdbg_param_t*, phpdbg_param_t* TSRMLS_ PHPDBG_API zend_bool phpdbg_match_param(const phpdbg_param_t *, const phpdbg_param_t * TSRMLS_DC); PHPDBG_API zend_ulong phpdbg_hash_param(const phpdbg_param_t * TSRMLS_DC); PHPDBG_API const char* phpdbg_get_param_type(const phpdbg_param_t* TSRMLS_DC); +PHPDBG_API char* phpdbg_param_tostring(const phpdbg_param_t *param, char **pointer TSRMLS_DC); /* * Command Executor