默认情况下,当我使用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()
告诉我正在调用Mage_Eav_Model_Entity_Abstract
中定义的getAttribute方法。除了上面的信息,我想知道什么类型的对象调用了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();
让我知道在用B类实例化的对象上调用了bar
方法。
使用库存PHP在OS X 10.6.8上运行,通过库存安装和升级。