用Xdebug和webgrind实现调用关系可视化

使用Xdebug和webgrind可以将php程序运行过程中的函数调用关系以图片的形式展示出来。

这里只记录一下webgrind的安装和配置过程,至于Xdebug的安装配置,网络上已经有很多可供参考的文章了。

webgrind 依赖gprof2dot,而这又依赖python和Graphviz,因此这4个都需要安装。

1.前提:开启xdebug

2.安装graphviz

下载地址: http://www.graphviz.org/download/,
下载后直接解压到一个文件夹即可

3.安装python

安装的时候勾选设置环境变量

4.安装gprof2dot

5.安装webgrind

下载地址:https://github.com/jokkedk/webgrind ,将下载后的文件解压,并放进网站www目录下,配置成一个本地网站(因为之后查看调用关系是在浏览器上打开该网站进行)。

6.修改webgrind的配置文件config.php

设定以下变量:
$storageDir:用来存放生成的图片,需要可写权限;
$pythonExecutable:python.exe的路径,如果设置了环境变量则可直接填python;
$dotExecutable:dot.exe路径,dot.exe在graphviz文件夹下的release/bin下;
$webgrindPath:webgrind的安装路径

修改webgrind目录下的index.php文件,将代码段1修改成代码段2,增加了变量$webgrindPath

_代码段1

1
2
3
shell_exec(Webgrind_Config::$pythonExecutable.' library/gprof2dot.py -n '.$showFraction
.' -f callgrind '.escapeshellarg(Webgrind_Config::xdebugOutputDir().$dataFile).' | '
.Webgrind_Config::$dotExecutable.' -T'.Webgrind_Config::$graphImageType.' -o '.escapeshellarg($filename));

_代码段2

1
2
3
shell_exec(Webgrind_Config::$pythonExecutable.' '.Webgrind_Config::$webgrindPath.'library/gprof2dot.py -n '.$showFraction
.' -f callgrind '.escapeshellarg(Webgrind_Config::xdebugOutputDir().$dataFile).' | '
.Webgrind_Config::$dotExecutable.' -T'.Webgrind_Config::$graphImageType.' -o ' .escapeshellarg($filename));

7.查看

配置好之后,开启degub调试,在浏览器访问步骤5中配置的网站即可查看


参考:

1.配置问题

https://github.com/jokkedk/webgrind/issues/22
2.mac系统,使用Tideways和xhgui

https://gist.github.com/ramsey/5eaff1bb420506f7aef5eef533a413c9