static void phpdbg_class_breaks_dtor(void *data) /* {{{ */
{
phpdbg_breakmethod_t *bp = (phpdbg_breakmethod_t*) data;
-
+
efree((char*)bp->class_name);
efree((char*)bp->func_name);
} /* }}} */
}
} /* }}} */
-void phpdbg_set_breakpoint_method(const char* class_name,
+void phpdbg_set_breakpoint_method(const char* class_name,
size_t class_len,
- const char* func_name,
+ const char* func_name,
size_t func_len TSRMLS_DC) /* {{{ */
{
HashTable class_breaks, *class_table;
-
+
if (zend_hash_find(&PHPDBG_G(bp_methods), class_name, class_len, (void**)&class_table) != SUCCESS) {
zend_hash_init(
&class_breaks, 8, NULL, phpdbg_class_breaks_dtor, 0);
zend_hash_update(
- &PHPDBG_G(bp_methods),
- class_name, class_len,
+ &PHPDBG_G(bp_methods),
+ class_name, class_len,
(void**)&class_breaks, sizeof(HashTable), (void**)&class_table);
}
if (!zend_hash_exists(class_table, func_name, func_len)) {
phpdbg_breakmethod_t new_break;
-
+
PHPDBG_G(flags) |= PHPDBG_HAS_METHOD_BP;
-
+
new_break.class_name = class_name;
new_break.class_len = class_len;
new_break.func_name = func_name;
new_break.func_len = func_len;
new_break.id = PHPDBG_G(bp_count)++;
-
+
zend_hash_update(class_table, func_name, func_len, &new_break, sizeof(phpdbg_breakmethod_t), NULL);
printf(
"[Breakpoint #%d added at %s::%s]\n", new_break.id, class_name, func_name);
if (fbc->type != ZEND_USER_FUNCTION) {
return FAILURE;
}
-
+
ops = (zend_op_array*)fbc;
-
+
if (ops->scope) {
/* find method breaks here */
return phpdbg_find_breakpoint_method(
HashTable *class_table;
phpdbg_breakmethod_t *bp;
- if (zend_hash_find(&PHPDBG_G(bp_methods), ops->scope->name, ops->scope->name_length,
+ if (zend_hash_find(&PHPDBG_G(bp_methods), ops->scope->name, ops->scope->name_length,
(void**)&class_table) == SUCCESS) {
if (zend_hash_find(
class_table,
- ops->function_name,
+ ops->function_name,
strlen(ops->function_name), (void**)&bp) == SUCCESS) {
-
+
printf(
"[Breakpoint #%d in %s::%s() at %s:%u]\n", bp->id, bp->class_name, bp->func_name,
zend_get_executed_filename(TSRMLS_C),
zend_hash_clean(&PHPDBG_G(bp_symbols));
zend_hash_clean(&PHPDBG_G(bp_oplines));
zend_hash_clean(&PHPDBG_G(bp_methods));
-
- PHPDBG_G(flags) &= ~(PHPDBG_HAS_FILE_BP|PHPDBG_HAS_SYM_BP|PHPDBG_HAS_METHOD_BP|PHPDBG_HAS_OPLINE_BP);
+
+ PHPDBG_G(flags) &= ~PHPDBG_BP_MASK;
PHPDBG_G(bp_count) = 0;
} /* }}} */