Как использовать Debug Backtrace в magento 2?

16

В magento 1.x мы можем использовать backtrace как

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

Как мы можем использовать это средство в Magento 2?

Ашиш Маданкар М2 Профессиона
источник

Ответы:

17

Вы можете использовать, debug_backtrace()как я добавил ниже.

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

Для справки, пожалуйста, проверьте dev\tests\api-functional\framework\Magento\TestFramework\TestCase\Webapi\Adapter\Rest\DocumentationGenerator.php

Кришна иджада
источник
1
Я отредактировал твой ответ. Был фрагмент неправильного синтаксиса, также я изменил его, чтобы улучшить вывод (раньше я @игнорировал предупреждения, например, когда 'class'не существует)
7ochem
2
@ krishnaijjadaati95Dev спасибо за ответ, это работает для меня
Ашиш Маданкар M2 Professiona
14

В классах регистратора Magento 2 debug_backtraceметод не используется напрямую.

Таким образом, способ обратной трассировки Magento 2 - использовать Magento\Framework\Debugкласс (который эквивалентен Varien_Debugклассу M1 ) и вызвать backtrace()метод:

/**
 * 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);
}
Рафаэль в цифровом пианизме
источник
4
Это должен быть принятый ответ.
mpchadwick
5

В любом приложении PHP вы можете просто сделать:

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

Из-за расстояния между именами в M2, вам нужно использовать new \Exception();вместоnew Exception();

Парас Суд
источник
спасибо за ответ, который я попробовал, но там говорится, что исключение класса «не найдено на пути моего вызывающего класса»
Ашиш Маданкар M2 Professiona
@AshishMadankar - см. Редактировать!
Paras Sood
Или короче: print_r((new \Exception())->getTraceAsString());(начиная с PHP 5.4, поэтому безопасно использовать в M2)
7ochem
1
@ParasSood это также работает
Ашиш Маданкар M2 Professiona
0

Вы можете использовать PHP-функцию debug_backtrace для отладки в Magento.

Используйте следующий код в magento для отслеживания проблемы с помощью debug_backtrace

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

Вы увидите трассировку отладки, которая позволит вам определить источник проблемы, и вы получите представление о том, как решить проблему.

DJ Dev
источник