mirror of
https://github.com/php/php-src.git
synced 2026-03-30 20:22:36 +02:00
Merge branch 'master' of https://github.com/krakjoe/phpdbg
This commit is contained in:
27
phpdbg_bp.c
27
phpdbg_bp.c
@@ -39,36 +39,26 @@ static void phpdbg_llist_breaksym_dtor(void *data) /* {{{ */
|
||||
efree((char*)bp->symbol);
|
||||
} /* }}} */
|
||||
|
||||
void phpdbg_set_breakpoint_file(const char *expr, const char *line_pos TSRMLS_DC) /* {{{ */
|
||||
void phpdbg_set_breakpoint_file(const char *path, long line_num TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
char resolved_name[MAXPATHLEN];
|
||||
long line_num = strtol(line_pos+1, NULL, 0);
|
||||
phpdbg_breakfile_t new_break;
|
||||
zend_llist *break_files_ptr;
|
||||
size_t name_len;
|
||||
char *path = estrndup(expr, line_pos - expr);
|
||||
size_t path_len = strlen(path);
|
||||
|
||||
if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) {
|
||||
efree(path);
|
||||
return;
|
||||
}
|
||||
efree(path);
|
||||
|
||||
name_len = strlen(resolved_name);
|
||||
new_break.filename = estrndup(resolved_name, name_len + 1);
|
||||
new_break.filename = estrndup(path, path_len + 1);
|
||||
new_break.line = line_num;
|
||||
|
||||
PHPDBG_G(has_file_bp) = 1;
|
||||
|
||||
if (zend_hash_find(&PHPDBG_G(bp_files),
|
||||
new_break.filename, name_len, (void**)&break_files_ptr) == FAILURE) {
|
||||
new_break.filename, path_len, (void**)&break_files_ptr) == FAILURE) {
|
||||
zend_llist break_files;
|
||||
|
||||
zend_llist_init(&break_files, sizeof(phpdbg_breakfile_t),
|
||||
phpdbg_llist_breakfile_dtor, 0);
|
||||
|
||||
zend_hash_update(&PHPDBG_G(bp_files),
|
||||
new_break.filename, name_len, &break_files, sizeof(zend_llist),
|
||||
new_break.filename, path_len, &break_files, sizeof(zend_llist),
|
||||
(void**)&break_files_ptr);
|
||||
}
|
||||
|
||||
@@ -76,14 +66,13 @@ void phpdbg_set_breakpoint_file(const char *expr, const char *line_pos TSRMLS_DC
|
||||
zend_llist_add_element(break_files_ptr, &new_break);
|
||||
} /* }}} */
|
||||
|
||||
void phpdbg_set_breakpoint_symbol(const char *expr, const char *opline_num_pos TSRMLS_DC) /* {{{ */
|
||||
void phpdbg_set_breakpoint_symbol(const char *name, long opline_num TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
long opline_num = opline_num_pos ? strtol(opline_num_pos+1, NULL, 0) : 0;
|
||||
phpdbg_breaksymbol_t new_break;
|
||||
zend_llist *break_sym_ptr;
|
||||
size_t name_len = opline_num_pos ? opline_num_pos - expr : strlen(expr);
|
||||
size_t name_len = strlen(name);
|
||||
|
||||
new_break.symbol = estrndup(expr, name_len);
|
||||
new_break.symbol = estrndup(name, name_len + 1);
|
||||
new_break.opline_num = opline_num;
|
||||
|
||||
PHPDBG_G(has_sym_bp) = 1;
|
||||
|
||||
@@ -38,8 +38,8 @@ typedef struct _phpdbg_breaksymbol_t {
|
||||
int id;
|
||||
} phpdbg_breaksymbol_t;
|
||||
|
||||
void phpdbg_set_breakpoint_file(const char*, const char* TSRMLS_DC);
|
||||
void phpdbg_set_breakpoint_symbol(const char*, const char* TSRMLS_DC);
|
||||
void phpdbg_set_breakpoint_file(const char*, long TSRMLS_DC);
|
||||
void phpdbg_set_breakpoint_symbol(const char*, long TSRMLS_DC);
|
||||
|
||||
int phpdbg_find_breakpoint_file(zend_op_array* TSRMLS_DC);
|
||||
int phpdbg_find_breakpoint_symbol(zend_function* TSRMLS_DC);
|
||||
|
||||
@@ -213,11 +213,27 @@ static PHPDBG_COMMAND(break) /* {{{ */
|
||||
const char *line_pos = zend_memrchr(expr, ':', expr_len);
|
||||
|
||||
if (line_pos) {
|
||||
phpdbg_set_breakpoint_file(expr, line_pos TSRMLS_CC);
|
||||
} else {
|
||||
const char *opline_num_pos = zend_memrchr(expr, '#', expr_len);
|
||||
char path[MAXPATHLEN], resolved_name[MAXPATHLEN];
|
||||
long line_num = strtol(line_pos+1, NULL, 0);
|
||||
|
||||
phpdbg_set_breakpoint_symbol(expr, opline_num_pos TSRMLS_CC);
|
||||
memcpy(path, expr, line_pos - expr);
|
||||
path[line_pos - expr] = 0;
|
||||
|
||||
if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
phpdbg_set_breakpoint_file(resolved_name, line_num TSRMLS_CC);
|
||||
} else {
|
||||
char name[200];
|
||||
const char *opnum_pos = zend_memrchr(expr, '#', expr_len);
|
||||
long opline_num = opnum_pos ? strtol(opnum_pos+1, NULL, 0) : 0;
|
||||
size_t name_len = opnum_pos ? opnum_pos - expr : strlen(expr);
|
||||
|
||||
memcpy(name, expr, name_len);
|
||||
name[name_len] = 0;
|
||||
|
||||
phpdbg_set_breakpoint_symbol(name, opline_num TSRMLS_CC);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
Reference in New Issue
Block a user