Slide 1

Slide 1 text

debug() + Symfony Nicolas Grekas https://github.com/nicolas-grekas/Patchwork-Dumper

Slide 2

Slide 2 text

Symfony 2.5 : Nouveautés du composant Debug Symfony 2.next : debug() au quotidien Comment ça marche ?

Slide 3

Slide 3 text

Fini les erreurs @-silencieuses ● $a = @new Foo\Bar(); ● Error handler – $loggers['scream']->log(...); ● Debug autoloader – error_reporting() – E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR

Slide 4

Slide 4 text

Casse de caractères ● new \Foo\Bar(); ● src/Foo/Bar.php ● namespace Foo; class Bar { }

Slide 5

Slide 5 text

Affichage des logs

Slide 6

Slide 6 text

Affichage des logs

Slide 7

Slide 7 text

Symfony 2.5 : Nouveautés du composant Debug Symfony 2.next : debug() au quotidien Comment ça marche ?

Slide 8

Slide 8 text

var_dump() /** * @Route("/hello/{name}", name="_demo_hello") * @Template() */ public function helloAction($name) { var_dump($this); return array('name' => $name); }

Slide 9

Slide 9 text

var_dump()

Slide 10

Slide 10 text

var_dump() $obj = new stdClass(); $array = [$obj, &$obj, &$obj]; var_dump($array); array(3) { [0] => class stdClass#1 (0) { } [1] => class stdClass#1 (0) { } [2] => class stdClass#1 (0) { } }

Slide 11

Slide 11 text

Ladybug

Slide 12

Slide 12 text

debug() ● Exacte, avec références hard et soft ● Détaillée, avec infos spécialisées ● Pretty et pratique ● Just works : robuste, rapide et memory efficient

Slide 13

Slide 13 text

debug() $obj = new stdClass(); $array = [$obj, &$obj, &$obj]; debug($array);

Slide 14

Slide 14 text

debug() class foo { public $fileHandler; protected $bar = 123; private $baz = 456; } $h = fopen(__FILE__, 'rb'); $f = new foo(); $f->fileHandler = $h; debug($f);

Slide 15

Slide 15 text

debug()

Slide 16

Slide 16 text

debug()

Slide 17

Slide 17 text

debug()

Slide 18

Slide 18 text

debug()

Slide 19

Slide 19 text

debug()

Slide 20

Slide 20 text

Symfony 2.5 : Nouveautés du composant Debug Symfony 2.next : debug() au quotidien Comment ça marche ?

Slide 21

Slide 21 text

Mécanisme interne ● Copie de la variable – Indépendante en terme de références – Limitée en nombre d'items si nécessaire – Adaptée aux objets rencontrés ● Représentation de la copie – CLI, HTML ou JSON

Slide 22

Slide 22 text

Intégration dans Symfony ● un DataCollector pour les copies extends \Symfony\Component\HttpKernel\DataCollector\DataCollector {% extends '@WebProfiler/Profiler/layout.html.twig' %} ● JSON comme intermédiaire ● une Twig extension pour la fonction debug()

Slide 23

Slide 23 text

Pull request #10640 ● Composant VarDebug en cours de discussion ● extension en C (merci J.Pauli)

Slide 24

Slide 24 text

Merci ! Bridge/Twig/Extension/VarDebugExtension.php | 57 +++++++++++++++++++++++++++ Bundle/FrameworkBundle/DependencyInjection/Configuration.php | 24 ++++++++++++ Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php | 11 ++++++ Bundle/FrameworkBundle/FrameworkBundle.php | 7 ++++ Bundle/FrameworkBundle/Resources/config/collectors.xml | 6 +++ Bundle/FrameworkBundle/Resources/config/var_debug.xml | 20 ++++++++++ Bundle/TwigBundle/Resources/config/twig.xml | 5 +++ Bundle/WebProfilerBundle/Resources/public/css/var_debug.css | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Bundle/WebProfilerBundle/Resources/public/js/var_debug.js | 245 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Bundle/WebProfilerBundle/Resources/views/Collector/var_debug.html.twig | 66 +++++++++++++++++++++++++++++++ Bundle/WebProfilerBundle/WebProfilerBundle.php | 9 +++++ Component/HttpKernel/DataCollector/VarDebugDataCollector.php | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Caster/BaseCaster.php | 68 ++++++++++++++++++++++++++++++++ Component/VarDebug/Caster/DoctrineCaster.php | 44 +++++++++++++++++++++ Component/VarDebug/Caster/ExceptionCaster.php | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Caster/PdoCaster.php | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Caster/SplCaster.php | 54 ++++++++++++++++++++++++++ Component/VarDebug/Collector/AbstractCollector.php | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Collector/CollectorInterface.php | 20 ++++++++++ Component/VarDebug/Collector/Data.php | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Collector/ExtCollector.php | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Collector/PhpCollector.php | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Dumper/AbstractDumper.php | 75 +++++++++++++++++++++++++++++++++++ Component/VarDebug/Dumper/CliDumper.php | 333 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Dumper/Cursor.php | 34 ++++++++++++++++ Component/VarDebug/Dumper/DumperInterface.php | 32 +++++++++++++++ Component/VarDebug/Dumper/HtmlDumper.php | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Dumper/JsonDumper.php | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Exception/ThrowingCasterException.php | 26 +++++++++++++ Component/VarDebug/LICENSE | 19 +++++++++ Component/VarDebug/README.md | 22 +++++++++++ Component/VarDebug/Resources/doc/json-spec.md | 410 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Resources/ext/README.rst | 71 +++++++++++++++++++++++++++++++++ Component/VarDebug/Resources/ext/config.m4 | 63 ++++++++++++++++++++++++++++++ Component/VarDebug/Resources/ext/config.w32 | 13 +++++++ Component/VarDebug/Resources/ext/php_symfony_debug.h | 55 ++++++++++++++++++++++++++ Component/VarDebug/Resources/ext/symfony_debug.c | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Resources/ext/tests/001.phpt | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Resources/functions/debug.php | 60 ++++++++++++++++++++++++++++ Component/VarDebug/Tests/CliDumperTest.php | 96 +++++++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/Tests/Fixtures/dumb-var.php | 30 ++++++++++++++ Component/VarDebug/Tests/JsonDumperTest.php | 86 ++++++++++++++++++++++++++++++++++++++++ Component/VarDebug/composer.json | 25 ++++++++++++ Component/VarDebug/phpunit.xml.dist | 29 ++++++++++++++