У magento 1.x ми можемо використовувати backtrace на зразок
echo Varien_Debug::backtrace(true, true); exit;
Як ми можемо використовувати цей об'єкт у Magento 2?
У magento 1.x ми можемо використовувати backtrace на зразок
echo Varien_Debug::backtrace(true, true); exit;
Як ми можемо використовувати цей об'єкт у Magento 2?
Відповіді:
Ви можете використовувати, 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
У класах реєстраторів 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);
}
У будь-якому додатку PHP ви можете просто зробити:
$e = new \Exception();
echo '<pre>';
print_r($e->getTraceAsString());
exit;
Через інтервал імен у M2, вам потрібно використовувати new \Exception();
замість простоnew Exception();
print_r((new \Exception())->getTraceAsString());
(оскільки PHP 5.4, настільки безпечний у використанні в M2)
Ви можете використовувати функцію 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();
Ви побачите зворотний процес відладки, який дозволить визначити джерело проблеми, і ви отримаєте уявлення про те, як виправити проблему.
@
ігнорував попередження, наприклад, коли'class'
його немає)