Skip to content

Commit 1fb67f1

Browse files
committed
fix #36 add more info to conditional breakpoint output
1 parent 4a35c1d commit 1fb67f1

File tree

3 files changed

+62
-6
lines changed

3 files changed

+62
-6
lines changed

phpdbg_bp.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -907,12 +907,26 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
907907
} break;
908908

909909
case PHPDBG_BREAK_COND: {
910-
phpdbg_notice("Conditional breakpoint #%d: (%s) %s:%u, hits: %lu",
911-
((phpdbg_breakcond_t*)brake)->id,
912-
((phpdbg_breakcond_t*)brake)->code,
913-
zend_get_executed_filename(TSRMLS_C),
914-
zend_get_executed_lineno(TSRMLS_C),
915-
((phpdbg_breakcond_t*)brake)->hits);
910+
if (((phpdbg_breakcond_t*)brake)->paramed) {
911+
char *param;
912+
phpdbg_notice("Conditional breakpoint #%d: at %s if %s %s:%u, hits: %lu",
913+
((phpdbg_breakcond_t*)brake)->id,
914+
phpdbg_param_tostring(&((phpdbg_breakcond_t*)brake)->param, &param TSRMLS_CC),
915+
((phpdbg_breakcond_t*)brake)->code,
916+
zend_get_executed_filename(TSRMLS_C),
917+
zend_get_executed_lineno(TSRMLS_C),
918+
((phpdbg_breakcond_t*)brake)->hits);
919+
if (param)
920+
free(param);
921+
} else {
922+
phpdbg_notice("Conditional breakpoint #%d: on %s == true %s:%u, hits: %lu",
923+
((phpdbg_breakcond_t*)brake)->id,
924+
((phpdbg_breakcond_t*)brake)->code,
925+
zend_get_executed_filename(TSRMLS_C),
926+
zend_get_executed_lineno(TSRMLS_C),
927+
((phpdbg_breakcond_t*)brake)->hits);
928+
}
929+
916930
} break;
917931

918932
default: {

phpdbg_cmd.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,47 @@ PHPDBG_API void phpdbg_clear_param(phpdbg_param_t *param TSRMLS_DC) /* {{{ */
119119

120120
} /* }}} */
121121

122+
PHPDBG_API char* phpdbg_param_tostring(const phpdbg_param_t *param, char **pointer TSRMLS_DC) /* {{{ */
123+
{
124+
switch (param->type) {
125+
case STR_PARAM:
126+
asprintf(pointer,
127+
"%s", param->str);
128+
break;
129+
130+
case ADDR_PARAM:
131+
asprintf(pointer,
132+
"%#lx", param->addr);
133+
break;
134+
135+
case NUMERIC_PARAM:
136+
asprintf(pointer,
137+
"%li",
138+
param->num);
139+
break;
140+
141+
case METHOD_PARAM:
142+
asprintf(pointer,
143+
"%s::%s",
144+
param->method.class,
145+
param->method.name);
146+
break;
147+
148+
case FILE_PARAM:
149+
asprintf(pointer,
150+
"%s:%u",
151+
param->file.name,
152+
param->file.line);
153+
break;
154+
155+
default:
156+
asprintf(pointer,
157+
"%s", "unknown");
158+
}
159+
160+
return *pointer;
161+
} /* }}} */
162+
122163
PHPDBG_API void phpdbg_copy_param(const phpdbg_param_t* src, phpdbg_param_t* dest TSRMLS_DC) /* {{{ */
123164
{
124165
switch ((dest->type = src->type)) {

phpdbg_cmd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ PHPDBG_API void phpdbg_copy_param(const phpdbg_param_t*, phpdbg_param_t* TSRMLS_
131131
PHPDBG_API zend_bool phpdbg_match_param(const phpdbg_param_t *, const phpdbg_param_t * TSRMLS_DC);
132132
PHPDBG_API zend_ulong phpdbg_hash_param(const phpdbg_param_t * TSRMLS_DC);
133133
PHPDBG_API const char* phpdbg_get_param_type(const phpdbg_param_t* TSRMLS_DC);
134+
PHPDBG_API char* phpdbg_param_tostring(const phpdbg_param_t *param, char **pointer TSRMLS_DC);
134135

135136
/*
136137
* Command Executor

0 commit comments

Comments
 (0)