Comment utiliser Debug Backtrace dans magento 2?

16

Dans magento 1.x, nous pouvons utiliser une trace comme

echo Varien_Debug::backtrace(true, true); exit;

Comment pouvons-nous utiliser cette fonctionnalité dans Magento 2?

Ashish Madankar M2 Professiona
la source

Réponses:

17

Vous pouvez utiliser debug_backtrace()comme je l'ai ajouté ci-dessous.

$debugBackTrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
foreach ($debugBackTrace as $item) {
    echo @$item['class'] . @$item['type'] . @$item['function'] . "\n";
}

Pour référence, veuillez vérifier dev\tests\api-functional\framework\Magento\TestFramework\TestCase\Webapi\Adapter\Rest\DocumentationGenerator.php

Krishna ijjada
la source
1
J'ai édité votre réponse. Il y avait un morceau de syntaxe incorrecte, aussi je l'ai changé pour avoir une meilleure sortie (j'ai utilisé @pour ignorer les avertissements, par exemple quand 'class'n'existe pas)
7ochem
2
@ krishnaijjadaati95Dev merci pour la réponse que cela fonctionne pour moi
Ashish Madankar M2 Professiona
14

Dans les classes de journalisation de Magento 2, la debug_backtraceméthode n'est pas utilisée directement.

Donc, la façon dont Magento 2 fait la trace est d'utiliser la Magento\Framework\Debugclasse (qui est l'équivalent de la Varien_Debugclasse M1 ) et d'appeler la backtrace()méthode:

/**
 * Prints or returns a backtrace
 *
 * @param bool $return      return or print
 * @param bool $html        output in HTML format
 * @param bool $withArgs    add short arguments of methods
 * @return string|bool
 */
public static function backtrace($return = false, $html = true, $withArgs = true)
{
    $trace = debug_backtrace();
    return self::trace($trace, $return, $html, $withArgs);
}
Raphael chez Digital Pianism
la source
4
Cela devrait être la réponse acceptée.
mpchadwick
5

Dans n'importe quelle application PHP, vous pouvez simplement faire:

$e = new \Exception();
echo '<pre>';
print_r($e->getTraceAsString()); 
exit;

En raison de l'espacement des noms en M2, vous devez utiliser new \Exception();au lieu de simplementnew Exception();

Paras Sood
la source
merci pour la réponse j'ai essayé cela mais il dit classe Exception 'introuvable dans le chemin de ma classe appelante
Ashish Madankar M2 Professiona
@AshishMadankar - voir modifier!
Paras Sood
Ou plus court: print_r((new \Exception())->getTraceAsString());(depuis PHP 5.4, donc sûr à utiliser dans M2)
7ochem
1
@ParasSood ça marche aussi
Ashish Madankar M2 Professiona
0

Vous pouvez utiliser la fonction PHP debug_backtrace pour déboguer dans Magento.

Utilisez le code suivant dans magento pour suivre le problème en utilisant debug_backtrace

foreach (debug_backtrace() as $_stack) {
    echo ($_stack["file"] ? $_stack["file"] : '') . ':' .
        ($_stack["line"] ? $_stack["line"] : '') . ' - ' .
        ($_stack["function"] ? $_stack["function"] : '').'<br/><hr/>';
 }
exit();

Vous verrez la trace de débogage qui vous permettra de définir la source du problème et vous aurez une idée de la façon de résoudre le problème.

DJ Dev
la source