Bagaimana cara menggunakan Debug Backtrace di magento 2?

16

Di magento 1.x kita bisa menggunakan backtrace like

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

Bagaimana kita bisa menggunakan fasilitas ini di Magento 2?

Ashish Madankar M2 Professiona
sumber

Jawaban:

17

Anda dapat menggunakan debug_backtrace()seperti yang saya tambahkan di bawah ini.

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

Untuk referensi silakan periksa dev\tests\api-functional\framework\Magento\TestFramework\TestCase\Webapi\Adapter\Rest\DocumentationGenerator.php

Krishna ijjada
sumber
1
Saya mengedit jawaban Anda. Ada sepotong sintaks yang salah, juga saya mengubahnya untuk memiliki hasil yang lebih baik (saya biasanya @mengabaikan peringatan, misalnya ketika 'class'tidak ada)
7ochem
2
@ krishnaijjadaati95Dev terima kasih atas jawaban yang berhasil buat saya
Ashish Madankar M2 Professiona
13

Di kelas logger dari Magento 2, debug_backtracemetode ini tidak digunakan secara langsung.

Jadi cara Magento 2 melakukan backtrace adalah dengan menggunakan Magento\Framework\Debugkelas (yang setara dengan Varien_Debugkelas M1 ) dan memanggil backtrace()metode:

/**
 * 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 di Digital Pianism
sumber
4
Ini harus menjadi jawaban yang diterima.
mpchadwick
5

Dalam aplikasi PHP apa pun, Anda cukup melakukan:

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

Karena spasi nama dalam M2, Anda harus menggunakan new \Exception();bukan hanyanew Exception();

Paras Sood
sumber
terima kasih atas jawaban yang saya coba tetapi ia mengatakan kelas Pengecualian 'tidak ditemukan di jalur kelas panggilan saya
Ashish Madankar M2 Professiona
@AshishMadankar - lihat edit!
Paras Sood
Atau lebih pendek: print_r((new \Exception())->getTraceAsString());(karena PHP 5.4, sangat aman digunakan dalam M2)
7ochem
1
@ParasSood juga berfungsi
Ashish Madankar M2 Professiona
0

Anda dapat menggunakan fungsi debug_backtrace PHP untuk debugging di Magento.

Gunakan kode berikut di magento untuk melacak masalah dengan menggunakan debug_backtrace

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

Anda akan melihat penelusuran balik debug yang akan memungkinkan Anda untuk menentukan sumber masalah dan Anda akan mendapatkan ide bagaimana memperbaiki masalah tersebut.

DJ Dev
sumber