xDebug: отчет об объектах во время трассировки функций - PullRequest
0 голосов
/ 16 марта 2012

По умолчанию, когда я профилирую запрос страницы с помощью xDebug, я получаю вывод, который выглядит примерно так

19.2468   51097384    -> is_string() /path/to/app/code/core/Mage/Eav/Model/Entity/Abstract.php:363
19.2469   51097336  -> Mage_Eav_Model_Entity_Abstract->getAttribute() /path/to/app/code/core/Mage/Eav/Model/Entity/Abstract.php:513
19.2469   51097384    -> is_numeric() /path/to/app/code/core/Mage/Eav/Model/Entity/Abstract.php:352
19.2469   51097384    -> is_string() /path/to/app/code/core/Mage/Eav/Model/Entity/Abstract.php:363
19.2470   51097336  -> Mage_Eav_Model_Entity_Abstract->getAttribute() /path/to/app/code/core/Mage/Eav/Model/Entity/Abstract.php:513
19.2470   51097384    -> is_numeric() /path/to/app/code/core/Mage/Eav/Model/Entity/Abstract.php:352
19.2471   51097384    -> is_string() /path/to/app/code/core/Mage/Eav/Model/Entity/Abstract.php:363
19.2949   50464472    -> Zend_Log->__destruct() /path/to/lib/Zend/Log.php:513
19.2950   50464472      -> Zend_Log_Writer_Stream->shutdown() /path/to/lib/Zend/Log.php:285

Существуют ли какие-либо флаги xdebug или другие функции для создания отчетов по объекту наберите для определенного звонка?То есть, когда отчет содержит эту строку

Mage_Eav_Model_Entity_Abstract->getAttribute()

, он говорит мне, что вызывается метод getAttribute, определенный в Mage_Eav_Model_Entity_Abstract.В дополнение к вышеупомянутой информации, я хотел бы знать, для какого типа объекта вызывается метод getAttribute.

Моя конечная цель - узнать немного больше о том, какие объекты потребляют большие количествапамяти в системе.Прямо сейчас, как только я определил большой скачок в потреблении памяти, я добавлю некоторый код отладки в корневые методы, используя memory_get_usage, что позволит мне идентифицировать объект с помощью вызова get_class($this);.Это работает, но добавляет время и умственные издержки процессу.Я хочу знать сразу после профилирования, какие конкретные объекты ответственны.

Обновление : согласно комментариям, если я запускаю следующий скрипт через веб-браузер

<?php
xdebug_start_trace();
abstract class A
{
    abstract function foo();        

    public function bar()
    {
        echo "A Test","\n";
    }
}

class B extends A
{
    public function foo()
    {
    }
}

$test = new B;
$test->bar();

xDebug сообщает следующее в своем файле трассировки:

TRACE START [2012-03-18 22:15:30]
    0.0248     643288     -> A->bar() /Users/alanstorm/Sites2011/magento1point6point1.dev/xdebug.php:21
    0.0258       8512
TRACE END   [2012-03-18 22:15:30]

То, что я хочу (и должен, согласно комментариям, ожидать?), вместо

A->bar();

, что позволяет мне знатьБыл вызван метод bar, определенный в классе A,

B->bar();

, что позволило бы мне узнать, что метод bar был вызван для объекта, для которого был создан экземпляр класса B.

Работает на OS X 10.6.8 со стандартным PHP, установленным и обновленным через стандартный pecl.

...