xDebug:在函数跟踪期间报告对象

时间:2012-03-15 20:11:53

标签: php magento xdebug

默认情况下,当我使用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上运行,通过库存安装和升级。

0 个答案:

没有答案