]> granicus.if.org Git - php/commitdiff
Breakpoints are now persistent over cleans
authorBob Weinand <bobwei9@hotmail.com>
Mon, 25 Nov 2013 22:38:43 +0000 (23:38 +0100)
committerBob Weinand <bobwei9@hotmail.com>
Mon, 25 Nov 2013 22:38:43 +0000 (23:38 +0100)
phpdbg.c
phpdbg_prompt.h

index ebe7cafb7b4e42b1a92d0fa444a7713d874f6594..9215e4342bc8e4509af662c4b77175bc9c9c92ee 100644 (file)
--- a/phpdbg.c
+++ b/phpdbg.c
@@ -552,6 +552,7 @@ int main(int argc, char **argv) /* {{{ */
        long cleaning = 0;
        int run = 0;
        int step = 0;
+       char *bp_tmp_file;
 
 #ifdef ZTS
        void ***tsrm_ls;
@@ -570,6 +571,12 @@ int main(int argc, char **argv) /* {{{ */
        tsrm_ls = ts_resource(0);
 #endif
 
+       bp_tmp_file = malloc(L_tmpnam);
+       tmpnam(bp_tmp_file);
+       if (bp_tmp_file == NULL) {
+               phpdbg_error("Unable to create temporary file");
+       }
+
 phpdbg_main:
        ini_entries = NULL;
        ini_entries_len = 0;
@@ -772,9 +779,8 @@ phpdbg_main:
                /* initialize from file */
                zend_try {
                        PHPDBG_G(flags) |= PHPDBG_IS_INITIALIZING;
-                       phpdbg_init(
-                                       init_file, init_file_len,
-                                       init_file_default TSRMLS_CC);
+                       phpdbg_init(init_file, init_file_len, init_file_default TSRMLS_CC);
+                       phpdbg_try_file_init(bp_tmp_file, strlen(bp_tmp_file), 0 TSRMLS_CC);
                        PHPDBG_G(flags) &= ~PHPDBG_IS_INITIALIZING;
                } zend_catch {
                        PHPDBG_G(flags) &= ~PHPDBG_IS_INITIALIZING;
@@ -803,9 +809,14 @@ phpdbg_main:
                                phpdbg_interactive(TSRMLS_C);
                        } zend_catch {
                                if ((PHPDBG_G(flags) & PHPDBG_IS_CLEANING)) {
+                                       FILE *bp_tmp_fp = fopen(bp_tmp_file, "w");
+                                       phpdbg_export_breakpoints(bp_tmp_fp TSRMLS_CC);
+                                       fclose(bp_tmp_fp);
                                        cleaning = 1;
                                        goto phpdbg_out;
-                               } else cleaning = 0;
+                               } else {
+                                       cleaning = 0;
+                               }
 
                                if (PHPDBG_G(flags) & PHPDBG_IS_QUITTING) {
                                        goto phpdbg_out;
@@ -851,6 +862,8 @@ phpdbg_out:
                goto phpdbg_main;
        }
 
+       free(bp_tmp_file);
+
 #ifdef ZTS
        /* bugggy */
        /* tsrm_shutdown(); */
index 8ed2d83c409be770558954ecd01ae2c9b0bc1fd2..0bb2cc957f8818a6ef560124162d0a8784fd65ed 100644 (file)
@@ -22,6 +22,7 @@
 
 /* {{{ */
 void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TSRMLS_DC);
+void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_init TSRMLS_DC);
 int phpdbg_interactive(TSRMLS_D);
 int phpdbg_compile(TSRMLS_D);
 void phpdbg_clean(zend_bool full TSRMLS_DC); /* }}} */