Débogage d'une variable avec une trace de la pile d'appels concise avec le VarDumper Symfony
Publié le 28/04/2023 • Actualisé le 28/04/2023
Dans ce bout de code, nous voyons comment déboguer avec le VarDumper Symfony une variable ainsi qu'une trace concise de la pile d'appels. La fonction debug_print_backtrace()
affiche la pile d'appels directement, sans la retourner. Pour avoir le même résultat, mais correctement formaté, on peut utiliser cette astuce simple pour capturer la sortie grâce à une exception et sa fonction getTraceAsString()
. Le débogueur de variables Symfony transforme correctement les retours à la ligne pour que chaque ligne soit affichée séparément. Idée originale par mon cher collègue twitter.com/meyer_baptiste ©.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use Symfony\Component\HttpFoundation\Request;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*/
trait Snippet253Trait
{
public function snippet253(Request $request): void
{
// I deactivate the debug in prod
// dump(
// $request->attributes->all(),
// (new \Exception())->getTraceAsString()
// );
$debug = <<<'NOWDOC'
Snippet253Trait.php on line 17:
array:9 [▼
"_route" => "snippet_run"
"_controller" => "App\Controller\SnippetController::run"
"_locale" => "en"
"slug" => "debugging-a-variable-with-a-concise-back-trace-with-the-symfony-vardumper"
"_route_params" => array:2 [▼
"_locale" => "en"
"slug" => "debugging-a-variable-with-a-concise-back-trace-with-the-symfony-vardumper"
]
]
Snippet253Trait.php on line 17:
"""
#0 /strangebuzz.com/src/Controller/SnippetController.php(238): App\Controller\SnippetController->snippet253(Object(Symfony\Component\HttpFoundation\Request), Object(App\Repository\ArticleRepository)) ◀
#1 /strangebuzz.com/vendor/symfony/http-kernel/HttpKernel.php(163): App\Controller\SnippetController->run(Object(Symfony\Component\HttpFoundation\Request), 'snippet_run', 'debugging-a-var...', 'en', Object(App\Log\SlackLogger), Object(App\Utility\SpamChecker)) ◀
#2 /strangebuzz.com/vendor/symfony/http-kernel/HttpKernel.php(74): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) ◀
#3 /strangebuzz.com/vendor/symfony/http-kernel/Kernel.php(184): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) ◀
#4 /strangebuzz.com/public/index.php(42): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request))
NOWDOC;
echo $debug;
// That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Lire la doc Plus sur le web Snippet aléatoire