Chris@0: Symfony Debug Extension for PHP 5 Chris@0: ================================= Chris@0: Chris@0: This extension publishes several functions to help building powerful debugging tools. Chris@0: It is compatible with PHP 5.3, 5.4, 5.5 and 5.6; with ZTS and non-ZTS modes. Chris@0: It is not required thus not provided for PHP 7. Chris@0: Chris@0: symfony_zval_info() Chris@0: ------------------- Chris@0: Chris@0: - exposes zval_hash/refcounts, allowing e.g. efficient exploration of arbitrary structures in PHP, Chris@0: - does work with references, preventing memory copying. Chris@0: Chris@0: Its behavior is about the same as: Chris@0: Chris@0: ```php Chris@0: gettype($array[$key]), Chris@0: 'zval_hash' => /* hashed memory address of $array[$key] */, Chris@0: 'zval_refcount' => /* internal zval refcount of $array[$key] */, Chris@0: 'zval_isref' => /* is_ref status of $array[$key] */, Chris@17: ]; Chris@0: Chris@0: switch ($info['type']) { Chris@0: case 'object': Chris@17: $info += [ Chris@0: 'object_class' => get_class($array[$key]), Chris@0: 'object_refcount' => /* internal object refcount of $array[$key] */, Chris@0: 'object_hash' => spl_object_hash($array[$key]), Chris@0: 'object_handle' => /* internal object handle $array[$key] */, Chris@17: ]; Chris@0: break; Chris@0: Chris@0: case 'resource': Chris@17: $info += [ Chris@0: 'resource_handle' => (int) $array[$key], Chris@0: 'resource_type' => get_resource_type($array[$key]), Chris@0: 'resource_refcount' => /* internal resource refcount of $array[$key] */, Chris@17: ]; Chris@0: break; Chris@0: Chris@0: case 'array': Chris@17: $info += [ Chris@0: 'array_count' => count($array[$key]), Chris@17: ]; Chris@0: break; Chris@0: Chris@0: case 'string': Chris@17: $info += [ Chris@0: 'strlen' => strlen($array[$key]), Chris@17: ]; Chris@0: break; Chris@0: } Chris@0: Chris@0: return $info; Chris@0: } Chris@0: ``` Chris@0: Chris@0: symfony_debug_backtrace() Chris@0: ------------------------- Chris@0: Chris@0: This function works like debug_backtrace(), except that it can fetch the full backtrace in case of fatal errors: Chris@0: Chris@0: ```php Chris@0: function foo() { fatal(); } Chris@0: function bar() { foo(); } Chris@0: Chris@0: function sd() { var_dump(symfony_debug_backtrace()); } Chris@0: Chris@0: register_shutdown_function('sd'); Chris@0: Chris@0: bar(); Chris@0: Chris@0: /* Will output Chris@0: Fatal error: Call to undefined function fatal() in foo.php on line 42 Chris@0: array(3) { Chris@0: [0]=> Chris@0: array(2) { Chris@0: ["function"]=> Chris@0: string(2) "sd" Chris@0: ["args"]=> Chris@0: array(0) { Chris@0: } Chris@0: } Chris@0: [1]=> Chris@0: array(4) { Chris@0: ["file"]=> Chris@0: string(7) "foo.php" Chris@0: ["line"]=> Chris@0: int(1) Chris@0: ["function"]=> Chris@0: string(3) "foo" Chris@0: ["args"]=> Chris@0: array(0) { Chris@0: } Chris@0: } Chris@0: [2]=> Chris@0: array(4) { Chris@0: ["file"]=> Chris@0: string(102) "foo.php" Chris@0: ["line"]=> Chris@0: int(2) Chris@0: ["function"]=> Chris@0: string(3) "bar" Chris@0: ["args"]=> Chris@0: array(0) { Chris@0: } Chris@0: } Chris@0: } Chris@0: */ Chris@0: ``` Chris@0: Chris@0: Usage Chris@0: ----- Chris@0: Chris@0: To enable the extension from source, run: Chris@0: Chris@0: ``` Chris@0: phpize Chris@0: ./configure Chris@0: make Chris@0: sudo make install Chris@0: ```