1
0
mirror of https://github.com/php/php-src.git synced 2026-03-30 20:22:36 +02:00
This commit is contained in:
krakjoe
2013-11-10 20:30:32 +00:00
3 changed files with 30 additions and 25 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;