watch 66 sapi/phpdbg/phpdbg_prompt.c PHPDBG_COMMAND_D(watch, "set watchpoint", 'w', phpdbg_watch_commands, "|ss"), watch 977 sapi/phpdbg/phpdbg_prompt.c PHPDBG_COMMAND(watch) /* {{{ */ watch 55 sapi/phpdbg/phpdbg_prompt.h PHPDBG_COMMAND(watch); /* }}} */ watch 46 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch; watch 53 sapi/phpdbg/phpdbg_watch.c watch = result->ptr; watch 56 sapi/phpdbg/phpdbg_watch.c if ((char *)phpdbg_get_page_boundary(watch->addr.ptr) > (char *)addr || (char *)phpdbg_get_page_boundary(watch->addr.ptr) + phpdbg_get_total_page_size(watch->addr.ptr, watch->size) < (char *)addr) { watch 61 sapi/phpdbg/phpdbg_watch.c return watch; watch 64 sapi/phpdbg/phpdbg_watch.c static void phpdbg_change_watchpoint_access(phpdbg_watchpoint_t *watch, int access TSRMLS_DC) { watch 68 sapi/phpdbg/phpdbg_watch.c m = mprotect(phpdbg_get_page_boundary(watch->addr.ptr), phpdbg_get_total_page_size(watch->addr.ptr, watch->size), access); watch 71 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_activate_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) { watch 72 sapi/phpdbg/phpdbg_watch.c phpdbg_change_watchpoint_access(watch, PROT_READ TSRMLS_CC); watch 75 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_deactivate_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) { watch 76 sapi/phpdbg/phpdbg_watch.c phpdbg_change_watchpoint_access(watch, PROT_READ | PROT_WRITE TSRMLS_CC); watch 79 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_store_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) { watch 80 sapi/phpdbg/phpdbg_watch.c phpdbg_btree_insert(&PHPDBG_G(watchpoint_tree), (zend_ulong)watch->addr.ptr, watch); watch 83 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_remove_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) { watch 84 sapi/phpdbg/phpdbg_watch.c phpdbg_btree_delete(&PHPDBG_G(watchpoint_tree), (zend_ulong)watch->addr.ptr); watch 87 sapi/phpdbg/phpdbg_watch.c void phpdbg_create_addr_watchpoint(void *addr, size_t size, phpdbg_watchpoint_t *watch) { watch 88 sapi/phpdbg/phpdbg_watch.c watch->addr.ptr = addr; watch 89 sapi/phpdbg/phpdbg_watch.c watch->size = size; watch 92 sapi/phpdbg/phpdbg_watch.c void phpdbg_create_zval_watchpoint(zval *zv, phpdbg_watchpoint_t *watch) { watch 93 sapi/phpdbg/phpdbg_watch.c phpdbg_create_addr_watchpoint(zv, sizeof(zval), watch); watch 94 sapi/phpdbg/phpdbg_watch.c watch->type = WATCH_ON_ZVAL; watch 97 sapi/phpdbg/phpdbg_watch.c void phpdbg_create_ht_watchpoint(HashTable *ht, phpdbg_watchpoint_t *watch) { watch 98 sapi/phpdbg/phpdbg_watch.c phpdbg_create_addr_watchpoint(ht, sizeof(HashTable), watch); watch 99 sapi/phpdbg/phpdbg_watch.c watch->type = WATCH_ON_HASHTABLE; watch 104 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) { watch 105 sapi/phpdbg/phpdbg_watch.c watch->flags |= PHPDBG_WATCH_SIMPLE; watch 107 sapi/phpdbg/phpdbg_watch.c phpdbg_store_watchpoint(watch TSRMLS_CC); watch 108 sapi/phpdbg/phpdbg_watch.c zend_hash_add(&PHPDBG_G(watchpoints), watch->str, watch->str_len, &watch, sizeof(phpdbg_watchpoint_t *), NULL); watch 110 sapi/phpdbg/phpdbg_watch.c if (watch->type == WATCH_ON_ZVAL) { watch 111 sapi/phpdbg/phpdbg_watch.c phpdbg_btree_insert(&PHPDBG_G(watch_HashTables), (zend_ulong)watch->parent_container, watch->parent_container->pDestructor); watch 112 sapi/phpdbg/phpdbg_watch.c watch->parent_container->pDestructor = (dtor_func_t)phpdbg_watch_HashTable_dtor; watch 115 sapi/phpdbg/phpdbg_watch.c phpdbg_activate_watchpoint(watch TSRMLS_CC); watch 120 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_array_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) { watch 123 sapi/phpdbg/phpdbg_watch.c switch (Z_TYPE_P(watch->addr.zv)) { watch 125 sapi/phpdbg/phpdbg_watch.c ht = Z_ARRVAL_P(watch->addr.zv); watch 128 sapi/phpdbg/phpdbg_watch.c ht = Z_OBJPROP_P(watch->addr.zv); watch 134 sapi/phpdbg/phpdbg_watch.c phpdbg_create_ht_watchpoint(ht, watch); watch 136 sapi/phpdbg/phpdbg_watch.c phpdbg_create_watchpoint(watch TSRMLS_CC); watch 148 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_recursive_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) { watch 151 sapi/phpdbg/phpdbg_watch.c if (watch->type != WATCH_ON_ZVAL) { watch 155 sapi/phpdbg/phpdbg_watch.c watch->flags |= PHPDBG_WATCH_RECURSIVE; watch 156 sapi/phpdbg/phpdbg_watch.c phpdbg_create_watchpoint(watch TSRMLS_CC); watch 158 sapi/phpdbg/phpdbg_watch.c switch (Z_TYPE_P(watch->addr.zv)) { watch 160 sapi/phpdbg/phpdbg_watch.c ht = Z_ARRVAL_P(watch->addr.zv); watch 163 sapi/phpdbg/phpdbg_watch.c ht = Z_OBJPROP_P(watch->addr.zv); watch 180 sapi/phpdbg/phpdbg_watch.c new_watch->parent = watch; watch 193 sapi/phpdbg/phpdbg_watch.c new_watch->str_len = asprintf(&new_watch->str, "%.*s%s%s%s", (int)watch->str_len, watch->str, Z_TYPE_P(watch->addr.zv) == IS_ARRAY?"[":"->", phpdbg_get_property_key(new_watch->name_in_parent), Z_TYPE_P(watch->addr.zv) == IS_ARRAY?"]":""); watch 203 sapi/phpdbg/phpdbg_watch.c new_watch->parent = watch; watch 204 sapi/phpdbg/phpdbg_watch.c new_watch->parent_container = watch->parent_container; watch 205 sapi/phpdbg/phpdbg_watch.c new_watch->name_in_parent = zend_strndup(watch->name_in_parent, watch->name_in_parent_len); watch 206 sapi/phpdbg/phpdbg_watch.c new_watch->name_in_parent_len = watch->name_in_parent_len; watch 208 sapi/phpdbg/phpdbg_watch.c new_watch->str_len = asprintf(&new_watch->str, "%.*s[]", (int)watch->str_len, watch->str); watch 218 sapi/phpdbg/phpdbg_watch.c static int phpdbg_delete_watchpoint_recursive(phpdbg_watchpoint_t *watch, zend_bool user_request TSRMLS_DC) { watch 219 sapi/phpdbg/phpdbg_watch.c if (watch->type == WATCH_ON_HASHTABLE || (watch->type == WATCH_ON_ZVAL && (Z_TYPE_P(watch->addr.zv) == IS_ARRAY || Z_TYPE_P(watch->addr.zv) == IS_OBJECT))) { watch 223 sapi/phpdbg/phpdbg_watch.c if (watch->type == WATCH_ON_HASHTABLE && user_request) { watch 231 sapi/phpdbg/phpdbg_watch.c ht = watch->addr.ht; watch 239 sapi/phpdbg/phpdbg_watch.c str_len = asprintf(&str, "%.*s%s%s%s", (int)watch->parent->str_len, watch->parent->str, Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"[":"->", phpdbg_get_property_key(Z_STRVAL(key)), Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"]":""); watch 241 sapi/phpdbg/phpdbg_watch.c str_len = asprintf(&str, "%.*s%s%li%s", (int)watch->parent->str_len, watch->parent->str, Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"[":"->", Z_LVAL(key), Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"]":""); watch 249 sapi/phpdbg/phpdbg_watch.c switch (Z_TYPE_P(watch->addr.zv)) { watch 251 sapi/phpdbg/phpdbg_watch.c ht = Z_ARRVAL_P(watch->addr.zv); watch 254 sapi/phpdbg/phpdbg_watch.c ht = Z_OBJPROP_P(watch->addr.zv); watch 264 sapi/phpdbg/phpdbg_watch.c return zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len); watch 269 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch; watch 276 sapi/phpdbg/phpdbg_watch.c watch = result->ptr; watch 278 sapi/phpdbg/phpdbg_watch.c if (watch->flags & PHPDBG_WATCH_RECURSIVE) { watch 279 sapi/phpdbg/phpdbg_watch.c ret = phpdbg_delete_watchpoint_recursive(watch, 1 TSRMLS_CC); watch 281 sapi/phpdbg/phpdbg_watch.c ret = zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len); watch 337 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch = emalloc(sizeof(phpdbg_watchpoint_t)); watch 338 sapi/phpdbg/phpdbg_watch.c watch->flags = 0; watch 341 sapi/phpdbg/phpdbg_watch.c watch->str = malloc(i + Z_STRLEN_P(key) + 2); watch 342 sapi/phpdbg/phpdbg_watch.c watch->str_len = sprintf(watch->str, "%.*s%s%s", (int)i, input, phpdbg_get_property_key(Z_STRVAL_P(key)), input[len - 1] == ']'?"]":""); watch 344 sapi/phpdbg/phpdbg_watch.c watch->name_in_parent = zend_strndup(last_index, index_len); watch 345 sapi/phpdbg/phpdbg_watch.c watch->name_in_parent_len = index_len; watch 346 sapi/phpdbg/phpdbg_watch.c watch->parent_container = parent; watch 347 sapi/phpdbg/phpdbg_watch.c phpdbg_create_zval_watchpoint(*zv, watch); watch 349 sapi/phpdbg/phpdbg_watch.c ret = callback(watch TSRMLS_CC) == SUCCESS || ret == SUCCESS?SUCCESS:FAILURE; watch 370 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch = emalloc(sizeof(phpdbg_watchpoint_t)); watch 371 sapi/phpdbg/phpdbg_watch.c watch->flags = 0; watch 372 sapi/phpdbg/phpdbg_watch.c watch->str = zend_strndup(input, len); watch 373 sapi/phpdbg/phpdbg_watch.c watch->str_len = len; watch 374 sapi/phpdbg/phpdbg_watch.c watch->name_in_parent = zend_strndup(last_index, index_len); watch 375 sapi/phpdbg/phpdbg_watch.c watch->name_in_parent_len = index_len; watch 376 sapi/phpdbg/phpdbg_watch.c watch->parent_container = parent; watch 377 sapi/phpdbg/phpdbg_watch.c phpdbg_create_zval_watchpoint(*zv, watch); watch 379 sapi/phpdbg/phpdbg_watch.c ret = callback(watch TSRMLS_CC) == SUCCESS || ret == SUCCESS?SUCCESS:FAILURE; watch 472 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch = result->ptr; watch 476 sapi/phpdbg/phpdbg_watch.c phpdbg_notice("%.*s was removed, removing watchpoint%s", (int)watch->str_len, watch->str, (watch->flags & PHPDBG_WATCH_RECURSIVE)?" recursively":""); watch 478 sapi/phpdbg/phpdbg_watch.c if (watch->flags & PHPDBG_WATCH_RECURSIVE) { watch 479 sapi/phpdbg/phpdbg_watch.c phpdbg_delete_watchpoint_recursive(watch, 0 TSRMLS_CC); watch 481 sapi/phpdbg/phpdbg_watch.c zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len); watch 510 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch; watch 513 sapi/phpdbg/phpdbg_watch.c watch = phpdbg_check_for_watchpoint( watch 521 sapi/phpdbg/phpdbg_watch.c if (watch == NULL) { watch 525 sapi/phpdbg/phpdbg_watch.c page = phpdbg_get_page_boundary(watch->addr.ptr); watch 526 sapi/phpdbg/phpdbg_watch.c size = phpdbg_get_total_page_size(watch->addr.ptr, watch->size); watch 547 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch = *(phpdbg_watchpoint_t **)pDest; watch 550 sapi/phpdbg/phpdbg_watch.c phpdbg_deactivate_watchpoint(watch TSRMLS_CC); watch 551 sapi/phpdbg/phpdbg_watch.c phpdbg_remove_watchpoint(watch TSRMLS_CC); watch 553 sapi/phpdbg/phpdbg_watch.c free(watch->str); watch 554 sapi/phpdbg/phpdbg_watch.c free(watch->name_in_parent); watch 555 sapi/phpdbg/phpdbg_watch.c efree(watch); watch 596 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch = result->ptr, *htwatch; watch 597 sapi/phpdbg/phpdbg_watch.c void *oldPtr = (char *)&dump->data + ((size_t)watch->addr.ptr - (size_t)dump->page); watch 600 sapi/phpdbg/phpdbg_watch.c if ((size_t)watch->addr.ptr < (size_t)dump->page || (size_t)watch->addr.ptr + watch->size > (size_t)dump->page + dump->size) { watch 605 sapi/phpdbg/phpdbg_watch.c if (zend_hash_find(watch->parent_container, watch->name_in_parent, watch->name_in_parent_len + 1, &curTest) == SUCCESS) { watch 606 sapi/phpdbg/phpdbg_watch.c if (watch->type == WATCH_ON_HASHTABLE) { watch 619 sapi/phpdbg/phpdbg_watch.c if (curTest != watch->addr.ptr) { watch 620 sapi/phpdbg/phpdbg_watch.c phpdbg_deactivate_watchpoint(watch TSRMLS_CC); watch 621 sapi/phpdbg/phpdbg_watch.c phpdbg_remove_watchpoint(watch TSRMLS_CC); watch 622 sapi/phpdbg/phpdbg_watch.c watch->addr.ptr = curTest; watch 623 sapi/phpdbg/phpdbg_watch.c phpdbg_store_watchpoint(watch TSRMLS_CC); watch 624 sapi/phpdbg/phpdbg_watch.c phpdbg_activate_watchpoint(watch TSRMLS_CC); watch 631 sapi/phpdbg/phpdbg_watch.c if (memcmp(oldPtr, watch->addr.ptr, watch->size) != SUCCESS) { watch 632 sapi/phpdbg/phpdbg_watch.c if (PHPDBG_G(flags) & PHPDBG_SHOW_REFCOUNTS || (watch->type == WATCH_ON_ZVAL && memcmp(oldPtr, watch->addr.zv, sizeof(zvalue_value))) || (watch->type == WATCH_ON_HASHTABLE watch 634 sapi/phpdbg/phpdbg_watch.c && !watch->addr.ht->inconsistent watch 636 sapi/phpdbg/phpdbg_watch.c && zend_hash_num_elements((HashTable *)oldPtr) != zend_hash_num_elements(watch->addr.ht))) { watch 639 sapi/phpdbg/phpdbg_watch.c phpdbg_notice("Breaking on watchpoint %s", watch->str); watch 642 sapi/phpdbg/phpdbg_watch.c switch (watch->type) { watch 644 sapi/phpdbg/phpdbg_watch.c int removed = ((zval *)oldPtr)->refcount__gc != watch->addr.zv->refcount__gc && !zend_symtable_exists(watch->parent_container, watch->name_in_parent, watch->name_in_parent_len + 1); watch 645 sapi/phpdbg/phpdbg_watch.c int show_value = memcmp(oldPtr, watch->addr.zv, sizeof(zvalue_value)); watch 646 sapi/phpdbg/phpdbg_watch.c int show_ref = ((zval *)oldPtr)->refcount__gc != watch->addr.zv->refcount__gc || ((zval *)oldPtr)->is_ref__gc != watch->addr.zv->is_ref__gc; watch 663 sapi/phpdbg/phpdbg_watch.c phpdbg_notice("Watchpoint %s was unset, removing watchpoint", watch->str); watch 664 sapi/phpdbg/phpdbg_watch.c zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len); watch 677 sapi/phpdbg/phpdbg_watch.c zend_print_flat_zval_r(watch->addr.zv TSRMLS_CC); watch 681 sapi/phpdbg/phpdbg_watch.c phpdbg_writeln("New refcount: %d; New is_ref: %d", watch->addr.zv->refcount__gc, watch->addr.zv->is_ref__gc); watch 684 sapi/phpdbg/phpdbg_watch.c if ((Z_TYPE_P(watch->addr.zv) == IS_ARRAY && Z_ARRVAL_P(watch->addr.zv) != Z_ARRVAL_P((zval *)oldPtr)) || (Z_TYPE_P(watch->addr.zv) != IS_OBJECT && Z_OBJ_HANDLE_P(watch->addr.zv) == Z_OBJ_HANDLE_P((zval *)oldPtr))) { watch 686 sapi/phpdbg/phpdbg_watch.c if (watch->flags & PHPDBG_WATCH_RECURSIVE) { watch 687 sapi/phpdbg/phpdbg_watch.c phpdbg_create_recursive_watchpoint(watch TSRMLS_CC); watch 691 sapi/phpdbg/phpdbg_watch.c if ((Z_TYPE_P((zval *)oldPtr) != IS_ARRAY || Z_ARRVAL_P(watch->addr.zv) == Z_ARRVAL_P((zval *)oldPtr)) && (Z_TYPE_P((zval *)oldPtr) != IS_OBJECT || Z_OBJ_HANDLE_P(watch->addr.zv) == Z_OBJ_HANDLE_P((zval *)oldPtr))) { watch 706 sapi/phpdbg/phpdbg_watch.c if (watch->addr.ht->inconsistent) { watch 707 sapi/phpdbg/phpdbg_watch.c phpdbg_notice("Watchpoint %s was unset, removing watchpoint", watch->str); watch 708 sapi/phpdbg/phpdbg_watch.c zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len); watch 716 sapi/phpdbg/phpdbg_watch.c elementDiff = zend_hash_num_elements((HashTable *)oldPtr) - zend_hash_num_elements(watch->addr.ht); watch 724 sapi/phpdbg/phpdbg_watch.c if (watch->flags & PHPDBG_WATCH_RECURSIVE) { watch 725 sapi/phpdbg/phpdbg_watch.c phpdbg_create_recursive_watchpoint(watch TSRMLS_CC); watch 729 sapi/phpdbg/phpdbg_watch.c if (((HashTable *)oldPtr)->pInternalPointer != watch->addr.ht->pInternalPointer) { watch 765 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t **watch; watch 768 sapi/phpdbg/phpdbg_watch.c zend_hash_get_current_data_ex(&PHPDBG_G(watchpoints), (void**) &watch, &position) == SUCCESS; watch 770 sapi/phpdbg/phpdbg_watch.c phpdbg_writeln("%.*s", (int)(*watch)->str_len, (*watch)->str); watch 781 sapi/phpdbg/phpdbg_watch.c phpdbg_watchpoint_t *watch = result->ptr; watch 783 sapi/phpdbg/phpdbg_watch.c if ((size_t)watch->addr.ptr + watch->size > (size_t)ptr) { watch 784 sapi/phpdbg/phpdbg_watch.c zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len); watch 89 sapi/phpdbg/phpdbg_watch.h void phpdbg_create_addr_watchpoint(void *addr, size_t size, phpdbg_watchpoint_t *watch); watch 90 sapi/phpdbg/phpdbg_watch.h void phpdbg_create_zval_watchpoint(zval *zv, phpdbg_watchpoint_t *watch);