如何回溯调试magento对象


How to backtrace debug a magento object

他们在用Magento实现的一个巨大网站上给了我一些任务
我使用带有Xdebug的Netbeans进行调试(我在lubuntu oneiric btw上),我发现自己对所有任务都很满意
我碰巧遇到了一项关于类重新声明的任务,我浪费了很多时间来找到要更改的正确文件

只是为了学习如何正确操作:
任务是更改元关键字,从类似的代码开始

<meta name="keywords" content="<?php echo htmlspecialchars($this->getKeywords()) ?>" />

使用Netbeans调试器,我可以很容易地打开包含getKeywords()的文件,该文件具有:

public function getKeywords()
{
    if (empty($this->_data['keywords'])) {
        $this->_data['keywords'] = Mage::getStoreConfig('design/head/default_keywords');
    }
    return $this->_data['keywords'];
}

现在,我找不到在这两种情况下进行调试的简单方法:(
特别是我的情况是,$this->_data['keywords']在我必须更正的页面上不是空的

那么我怎么能容易地知道这个对象是如何创建的,特别是谁填充了_data['keywords']
我自己花了很长时间才找到合适的文件。

我在调试方面不是很专业,所以也许我可以用netbeans w/xdebug来做,但我搞不清楚。

感谢

打开终端和

grep 'setKeywords(' app/code/ -rsn 

这将显示设置或使用此变量的位置

grep -ri "Keywords" * | grep -v cache

'-r'表示递归
'-i'表示不区分大小写
"*"表示任何文件名
"|grep-v缓存"意味着去掉缓存目录中的任何引用

您可以临时创建方法:

public function setKeywords($s) {
    echo sprintf('<pre>%s</pre>', print_r(debug_backtrace(), true));
    exit;
}

将此代码添加到具有getKeywords()的同一个类中,这样当有人通过此函数添加数据时,您将看到回溯并了解它是如何发生的