]> granicus.if.org Git - php/commitdiff
- Added argument name to backtrace dump
authorFelipe Pena <felipensp@gmail.com>
Sun, 8 Dec 2013 19:37:35 +0000 (17:37 -0200)
committerFelipe Pena <felipensp@gmail.com>
Sun, 8 Dec 2013 19:37:35 +0000 (17:37 -0200)
phpdbg_frame.c
phpdbg_utils.c
phpdbg_utils.h

index 1037265c05d0c0719b7df1e7c8e97f45cd0a0242..1bc1f9cceadc592f1122fc2cadcbf8dbf4a86c46 100644 (file)
@@ -130,11 +130,19 @@ static void phpdbg_dump_prototype(zval **tmp TSRMLS_DC) /* {{{ */
        if (zend_hash_find(Z_ARRVAL_PP(tmp), "args", sizeof("args"),
                (void **)&args) == SUCCESS) {
                HashPosition iterator;
-               int j = 0;
+               const zend_function *func = phpdbg_get_function(
+                       Z_STRVAL_PP(funcname), is_class == FAILURE ? NULL : Z_STRVAL_PP(class) TSRMLS_CC);
+               const zend_arg_info *arginfo = func ? func->common.arg_info : NULL;
+               int j = 0, m = func ? func->common.num_args : 0;
 
                zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(args), &iterator);
                while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(args),
                        (void **) &argstmp, &iterator) == SUCCESS) {
+
+                       if (m && j < m) {
+                               phpdbg_write("%s=", arginfo[j].name);
+                       }
+
                        if (j++) {
                                phpdbg_write(", ");
                        }
index 67e1cbc4643da8f2fa3a9c84d995e1b9e06fc761..f543af092ae673d5b35bdea448f079ce59a54acf 100644 (file)
@@ -144,6 +144,33 @@ PHPDBG_API const char *phpdbg_current_file(TSRMLS_D) /* {{{ */
        return file;
 } /* }}} */
 
+PHPDBG_API const zend_function *phpdbg_get_function(const char *fname, const char *cname TSRMLS_DC) /* {{{ */
+{
+       zend_function *func = NULL;
+       size_t fname_len = strlen(fname);
+       char *lcname = zend_str_tolower_dup(fname, fname_len);
+
+       if (cname) {
+               zend_class_entry **ce;
+               size_t cname_len = strlen(cname);
+               char *lc_cname = zend_str_tolower_dup(cname, cname_len);
+               int ret = zend_lookup_class(lc_cname, cname_len, &ce TSRMLS_CC);
+
+               efree(lc_cname);
+
+               if (ret == SUCCESS) {
+                       zend_hash_find(&(*ce)->function_table, lcname, fname_len+1,
+                               (void**)&func);
+               }
+       } else {
+               zend_hash_find(EG(function_table), lcname, fname_len+1,
+                       (void**)&func);
+       }
+
+       efree(lcname);
+       return func;
+} /* }}} */
+
 PHPDBG_API char *phpdbg_trim(const char *str, size_t len, size_t *new_len) /* {{{ */
 {
        const char *p = str;
@@ -245,18 +272,18 @@ PHPDBG_API int phpdbg_print(int type TSRMLS_DC, FILE *fp, const char *format, ..
 
 PHPDBG_API int phpdbg_rlog(FILE *fp, const char *fmt, ...) { /* {{{ */
        int rc = 0;
-       
+
        va_list args;
        struct timeval tp;
-       
+
        va_start(args, fmt);
        if (gettimeofday(&tp, NULL) == SUCCESS) {
                char friendly[100];
                char *format = NULL, *buffer = NULL;
-               
+
                strftime(friendly, 100, "%a %b %d %T.%%04d %Y", localtime(&tp.tv_sec));
                asprintf(
-                       &buffer, friendly, tp.tv_usec/1000);    
+                       &buffer, friendly, tp.tv_usec/1000);
                asprintf(
                        &format, "[%s]: %s\n", buffer, fmt);
                rc = vfprintf(
@@ -266,7 +293,7 @@ PHPDBG_API int phpdbg_rlog(FILE *fp, const char *fmt, ...) { /* {{{ */
                free(buffer);
        }
        va_end(args);
-       
+
        return rc;
 } /* }}} */
 
@@ -327,7 +354,7 @@ PHPDBG_API void phpdbg_set_prompt(const char *prompt TSRMLS_DC) /* {{{ */
 } /* }}} */
 
 PHPDBG_API const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */
-{      
+{
        /* find cached prompt */
        if (PHPDBG_G(prompt)[1]) {
                return PHPDBG_G(prompt)[1];
index 3252f365574f04057d400354cbb8d515a581866e..3126d0c2cf64fa2fd494914b1aeb1cb733bda2af 100644 (file)
@@ -30,6 +30,7 @@ PHPDBG_API int phpdbg_is_class_method(const char*, size_t, char**, char**);
 PHPDBG_API const char *phpdbg_current_file(TSRMLS_D);
 PHPDBG_API char *phpdbg_resolve_path(const char* TSRMLS_DC);
 PHPDBG_API char *phpdbg_trim(const char*, size_t, size_t*);
+PHPDBG_API const zend_function *phpdbg_get_function(const char*, const char* TSRMLS_DC);
 
 /**
  * Error/notice/formatting helpers