По умолчанию, когда я профилирую запрос страницы с помощью 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.