Jak korzystać z narzędzia Debug Backtrace w Magento 2?

16

W magento 1.x możemy użyć funkcji śledzenia wstecznego

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

Jak możemy korzystać z tego obiektu w Magento 2?

Ashish Madankar M2 Professiona
źródło

Odpowiedzi:

17

Możesz użyć, debug_backtrace()jak dodałem poniżej.

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

W celach informacyjnych sprawdź dev\tests\api-functional\framework\Magento\TestFramework\TestCase\Webapi\Adapter\Rest\DocumentationGenerator.php

Krishna ijjada
źródło
1
Zredagowałem twoją odpowiedź. Wystąpił fragment niepoprawnej składni, zmieniłem ją również, aby uzyskać lepszą wydajność ( @ignorowałem ostrzeżenia, na przykład, gdy 'class'nie istnieje)
7ochem
2
@ krishnaijjadaati95Dev dzięki za odpowiedź, która działa dla mnie
Ashish Madankar M2 Professiona
14

W klasach rejestratorów Magento 2 debug_backtracemetoda nie jest używana bezpośrednio.

Tak więc sposobem śledzenia wstecznego w Magento 2 jest użycie Magento\Framework\Debugklasy (która jest odpowiednikiem Varien_Debugklasy M1 ) i wywołanie backtrace()metody:

/**
 * 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 at Digital Pianism
źródło
4
To powinna być zaakceptowana odpowiedź.
mpchadwick,
5

W dowolnej aplikacji PHP możesz po prostu:

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

Ze względu na odstępy między nazwami w M2, musisz użyć new \Exception();zamiast po prostunew Exception();

Paras Sood
źródło
dziękuję za odpowiedź, próbowałem tego, ale mówi, że wyjątek klasy „nie znaleziono na ścieżce mojej klasy wzywającej
Ashish Madankar M2 Professiona
@AshishMadankar - patrz edycja!
Paras Sood
Lub krócej: print_r((new \Exception())->getTraceAsString());(od PHP 5.4, więc bezpieczny w użyciu w M2)
7ochem
1
@ParasSood działa również
Ashish Madankar M2 Professiona
0

Możesz użyć funkcji PHP debug_backtrace do debugowania w Magento.

Użyj następującego kodu w magento, aby śledzić problem za pomocą debug_backtrace

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

Zobaczysz ślad debugowania, który pozwoli ci zdefiniować źródło problemu i dostaniesz pomysł, jak rozwiązać problem.

DJ Dev
źródło