在Joomla使用debug_print_backtrace()来帮助我们调试php代码 原
在开发joomla扩展的时候,我们经常需要调试问题。最近我就遇到了一个奇怪的路径问题,发现joomla在后台调用的模型居然是前台的模型,隐约感觉到这个和路径有关。由于joomla是模块化设计,并不能知道到底是哪一个组件或者插件调用了代码。调试比较困难。这个时候可以使用debug_print_backtrace()来帮助我们调试php代码。
debug_print_backtrace()打印某个方法的调用堆栈
我遇到的问题就是可以确认一定有某个地方调用了addIncludePath方法,但不确定是哪一个文件。这个时候我做了一些改进,在addIncludePath方法中加入了debug_print_backtrace()。如下:
/** * Add a directory where \JModelLegacy should search for models. You may * either pass a string or an array of directories. * * @param mixed $path A path or array[sting] of paths to search. * @param string $prefix A prefix for models. * * @return array An array with directory elements. If prefix is equal to '', all directories are returned. * * @since 3.0 */ public static function addIncludePath($path = '', $prefix = '') { static $paths; if (!isset($paths)) { $paths = array(); } if (!isset($paths[$prefix])) { $paths[$prefix] = array(); } if (!isset($paths[''])) { $paths[''] = array(); } if (!empty($path)) { jimport('joomla.filesystem.path'); foreach ((array) $path as $includePath) { if (!in_array($includePath, $paths[$prefix])) { array_unshift($paths[$prefix], \JPath::clean($includePath)); } if (!in_array($includePath, $paths[''])) { array_unshift($paths[''], \JPath::clean($includePath)); } } } echo "<pre>"; print_r($paths); debug_print_backtrace(); echo "</pre>"; return $paths[$prefix]; }
输出的结果
此时就可以看到每一次调用这个方法后path的变化,且能够追踪到具体的调用文件,结果一目了然。
感悟
在php中,使用的debug_print_backtrace()方法可以帮助我们解决负责的调试,特别是在CMS这些框架程序中。
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。