Wie verwende ich Debug Backtrace in Magento 2?

15

In Magento 1.x können wir Backtrace wie verwenden

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

Wie können wir diese Funktion in Magento 2 nutzen?

Ashish Madankar M2 Professiona
quelle

Antworten:

17

Sie können verwenden, debug_backtrace()wie ich unten hinzugefügt habe.

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

Als Referenz bitte überprüfen dev\tests\api-functional\framework\Magento\TestFramework\TestCase\Webapi\Adapter\Rest\DocumentationGenerator.php

Krishna ijjada
quelle
1
Ich habe deine Antwort bearbeitet. Es gab eine falsche Syntax, außerdem habe ich sie geändert, um eine bessere Ausgabe @zu 'class'
erzielen
2
@ krishnaijjadaati95Dev danke für die Antwort, die es für mich funktioniert
Ashish Madankar M2 Professiona
12

In den Logger-Klassen von Magento 2 wird die debug_backtraceMethode nicht direkt verwendet.

Die Magento 2-Methode zum Zurückverfolgen besteht also darin, die Magento\Framework\DebugKlasse (die der M1- Varien_DebugKlasse entspricht) zu verwenden und die folgende backtrace()Methode aufzurufen :

/**
 * 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 beim digitalen Pianismus
quelle
2
Dies sollte die akzeptierte Antwort sein.
mpchadwick
5

In jeder PHP-Anwendung können Sie einfach Folgendes tun:

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

Aufgrund des Namensabstands in M2 müssen Sie new \Exception();statt nur verwendennew Exception();

Paras Sood
quelle
Vielen
@AshishMadankar - siehe bearbeiten!
Paras Sood
Oder kürzer: print_r((new \Exception())->getTraceAsString());(seit PHP 5.4, also sicher in M2 zu verwenden)
7ochem
1
@ ParasSood es funktioniert auch
Ashish Madankar M2 Professiona
0

Sie können die PHP-Funktion debug_backtrace zum Debuggen in Magento verwenden.

Verwenden Sie den folgenden Code in Magento, um das Problem mithilfe von debug_backtrace zu verfolgen

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

Sie sehen den Debug-Backtrace, mit dem Sie die Problemquelle definieren können, und erhalten eine Vorstellung davon, wie Sie das Problem beheben können.

DJ Dev
quelle