├── .gitignore ├── CREDITS ├── EXPERIMENTAL ├── README.md ├── config.m4 ├── config.w32 ├── php_valgrind.h └── valgrind.c /.gitignore: -------------------------------------------------------------------------------- 1 | # Object files 2 | *.o 3 | 4 | # Libraries 5 | *.lib 6 | *.a 7 | 8 | # Shared objects (inc. Windows DLLs) 9 | *.dll 10 | *.so 11 | *.so.* 12 | *.dylib 13 | 14 | # Executables 15 | *.exe 16 | *.out 17 | *.app 18 | -------------------------------------------------------------------------------- /CREDITS: -------------------------------------------------------------------------------- 1 | valgrind 2 | Xinchen Hui 3 | -------------------------------------------------------------------------------- /EXPERIMENTAL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laruence/php-valgrind/c359144265c27e4a4f2152954738989c17165662/EXPERIMENTAL -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | php-valgrind 2 | ============ 3 | 4 | A PHP valgrind tool, it can be used to toggle collect in PHP scripts 5 | 6 | ```php 7 | | 16 | +----------------------------------------------------------------------+ 17 | */ 18 | 19 | /* $Id$ */ 20 | 21 | #ifndef PHP_VALGRIND_H 22 | #define PHP_VALGRIND_H 23 | 24 | extern zend_module_entry valgrind_module_entry; 25 | #define phpext_valgrind_ptr &valgrind_module_entry 26 | 27 | #ifdef PHP_WIN32 28 | #define PHP_VALGRIND_API __declspec(dllexport) 29 | #else 30 | #define PHP_VALGRIND_API 31 | #endif 32 | 33 | #ifdef ZTS 34 | #include "TSRM.h" 35 | #endif 36 | 37 | #define VALGRIND_VERSION "0.1.0" 38 | 39 | PHP_MINFO_FUNCTION(valgrind); 40 | 41 | PHP_FUNCTION(callgrind_toggle); 42 | PHP_FUNCTION(callgrind_dump); 43 | 44 | ZEND_BEGIN_MODULE_GLOBALS(valgrind) 45 | zend_bool flag; 46 | ZEND_END_MODULE_GLOBALS(valgrind) 47 | 48 | #ifdef ZTS 49 | #define VALGRIND_G(v) TSRMG(valgrind_globals_id, zend_valgrind_globals *, v) 50 | #else 51 | #define VALGRIND_G(v) (valgrind_globals.v) 52 | #endif 53 | 54 | #endif /* PHP_VALGRIND_H */ 55 | 56 | /* 57 | * Local variables: 58 | * tab-width: 4 59 | * c-basic-offset: 4 60 | * End: 61 | * vim600: noet sw=4 ts=4 fdm=marker 62 | * vim<600: noet sw=4 ts=4 63 | */ 64 | -------------------------------------------------------------------------------- /valgrind.c: -------------------------------------------------------------------------------- 1 | /* 2 | +----------------------------------------------------------------------+ 3 | | PHP Version 5 | 4 | +----------------------------------------------------------------------+ 5 | | Copyright (c) 2013-2013 The PHP Group | 6 | +----------------------------------------------------------------------+ 7 | | This source file is subject to version 3.01 of the PHP license, | 8 | | that is bundled with this package in the file LICENSE, and is | 9 | | available through the world-wide-web at the following url: | 10 | | http://www.php.net/license/3_01.txt | 11 | | If you did not receive a copy of the PHP license and are unable to | 12 | | obtain it through the world-wide-web, please send a note to | 13 | | license@php.net so we can mail you a copy immediately. | 14 | +----------------------------------------------------------------------+ 15 | | Author: Xinchen Hui | 16 | +----------------------------------------------------------------------+ 17 | */ 18 | 19 | /* $Id$ */ 20 | 21 | #ifdef HAVE_CONFIG_H 22 | #include "config.h" 23 | #endif 24 | 25 | #include "php.h" 26 | #include "php_ini.h" 27 | #include "ext/standard/info.h" 28 | #include "php_valgrind.h" 29 | 30 | #include 31 | 32 | ZEND_DECLARE_MODULE_GLOBALS(valgrind) 33 | 34 | /* {{{ valgrind_functions[] 35 | */ 36 | zend_function_entry valgrind_functions[] = { 37 | PHP_FE(callgrind_toggle, NULL) 38 | PHP_FE(callgrind_dump, NULL) 39 | {NULL, NULL, NULL} 40 | }; 41 | /* }}} */ 42 | 43 | /* {{{ PHP_GINIT_FUNCTION 44 | */ 45 | PHP_GINIT_FUNCTION(valgrind) 46 | { 47 | valgrind_globals->flag = 0; 48 | } 49 | /* }}} */ 50 | 51 | /* {{{ PHP_MINFO_FUNCTION 52 | */ 53 | PHP_MINFO_FUNCTION(valgrind) 54 | { 55 | php_info_print_table_start(); 56 | php_info_print_table_header(2, "valgrind support", "enabled"); 57 | php_info_print_table_header(2, "version", VALGRIND_VERSION); 58 | php_info_print_table_end(); 59 | } 60 | /* }}} */ 61 | 62 | /* {{{ proto bool callgrind_toggle() 63 | */ 64 | PHP_FUNCTION(callgrind_toggle) 65 | { 66 | VALGRIND_G(flag) = !VALGRIND_G(flag); 67 | if (VALGRIND_G(flag)) { 68 | CALLGRIND_START_INSTRUMENTATION; 69 | } else { 70 | CALLGRIND_STOP_INSTRUMENTATION; 71 | } 72 | CALLGRIND_TOGGLE_COLLECT; 73 | 74 | RETURN_BOOL(VALGRIND_G(flag)); 75 | } 76 | /* }}} */ 77 | 78 | /* {{{ proto bool callgrind_dump() 79 | */ 80 | PHP_FUNCTION(callgrind_dump) 81 | { 82 | CALLGRIND_DUMP_STATS; 83 | 84 | RETURN_TRUE; 85 | } 86 | /* }}} */ 87 | 88 | /* {{{ valgrind_module_entry 89 | */ 90 | zend_module_entry valgrind_module_entry = { 91 | #if ZEND_MODULE_API_NO >= 20010901 92 | STANDARD_MODULE_HEADER, 93 | #endif 94 | "valgrind", 95 | valgrind_functions, 96 | NULL, 97 | NULL, 98 | NULL, 99 | NULL, 100 | PHP_MINFO(valgrind), 101 | VALGRIND_VERSION, 102 | PHP_MODULE_GLOBALS(valgrind), 103 | PHP_GINIT(valgrind), 104 | NULL, 105 | NULL, 106 | STANDARD_MODULE_PROPERTIES_EX 107 | }; 108 | /* }}} */ 109 | 110 | #ifdef COMPILE_DL_VALGRIND 111 | ZEND_GET_MODULE(valgrind) 112 | #endif 113 | 114 | /* 115 | * Local variables: 116 | * tab-width: 4 117 | * c-basic-offset: 4 118 | * End: 119 | * vim600: noet sw=4 ts=4 fdm=marker 120 | * vim<600: noet sw=4 ts=4 121 | */ 122 | --------------------------------------------------------------------------------