如何在magento 2中使用Debug Backtrace?


Answers:


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感谢您为我使用的答案
Ashish Madankar M2 Professiona

14

在Magento 2的记录器类中,debug_backtrace不直接使用该方法。

因此,Magento 2进行回溯的方法是使用Magento\Framework\Debug该类(与M1 Varien_Debug类等效)并调用该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();


感谢您尝试的答案,但它说我的上课类别的路径中找不到类Exception
Ashish Madankar M2 Professiona

@AshishMadankar-参见编辑!
Paras Sood

或更短的时间:(print_r((new \Exception())->getTraceAsString());因为PHP 5.4,所以可以在M2中安全使用)
7ochem

1
@ParasSood也可以使用
Ashish Madankar 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();

您将看到调试回溯,您可以通过它来定义问题源,还可以找到解决问题的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.