PHP Xdebug 调试

| 选择喜欢的代码风格  

合适的调试器是软件开发中最有用的工具之一,它使你可以跟踪程序执行结果并监视程序堆栈中的信息。Xdebug 是一个 php 的调试器,它可以被用来在很多 IDE(集成开发环境) 中做断点调试以及堆栈检查。它还可以像 PHPUnit 和 KCacheGrind 一样,做代码覆盖检查或者程序性能跟踪。

如果你仍在使用 var_dump()print_r() 调错,经常会发现自己处于困境,并且仍然找不到解决办法。这时,你该使用调试器了。

安装 Xdebug 可能很费事,但其中一个最重要的「远程调试」特性 —— 如果你在本地开发,并在虚拟机或者其他服务器上测试,远程调试可能是你想要的一种方式。

通常,你需要修改你的 Apache VHost 或者 .htaccess 文件的这些值:

php_value xdebug.remote_host=192.168.?.?
php_value xdebug.remote_port=9000

「remote host」 和 「remote port」 这两项对应和你本地开发机监听的地址和端口。然后将你的 IDE 设置成 「listen for connections」 模式,并访问网址:

http://your-website.example.com/index.php?XDEBUG_SESSION_START=1

你的 IDE 将会拦截当前执行的脚本状态,运行你设置的断点并查看内存中的值。

图形化的调试器可以让你非常容易的逐步的查看代码、变量,以及运行时的 evel 代码。许多 IDE 已经内置或提供了插件支持 XDebug 图形化调试器。比如 MacGDBp 是 Mac 上的一个免费,开源的单机调试器。

源码安装的php,安装Xdebug

/path/to/php/bin/pecl install xdebug
#使用php-config --extension_dir 或者 php -i | grep extension_dir 来寻找PHP扩展目录

更新php.ini,添加:

zend_extension=/path/to/xdebug.so

重启php。Finish

Config


推荐的Xdebug配置

xdebug.profiler_enable = 0
#不让自动运行
xdebug.profiler_enable_trigger = 1
#在任何一个URL中加入XDEBUG_PROFILE=1的查询参数,启动Xdebug
xdebug.profiler_output_dir = /path/to/profiler/results
#分析报告保存路径

注意: /path/to/profiler/results 这个文件夹一定要存在!

Analyze


Xdebug生成的结果是CacheGrind格式,Mac安装KCacheGrind来查看

brew install qcachegrind

Testing


请求本地 url

http://url?XDEBUG_PROFILE=1

在指定目录中获得文件

cachegrind.out.31881

31881是指这个文件是由31881这个线程产生的

修改文件名:

mv cachegrind.out.31881 callgrind.out.31881

之后。再用 qcachegrind 打开这个文件。

坑:


如果提示 XDEBUG NOT LOADED AS ZEND EXTENSION,原因是在安装Xdebug时由于我们将Xdebug的DLL文件复制到了php\ext目录下,容易以PHP扩展库的形式加载 Xdebug,应该以 zend_extension 形式添加DLL/SO



发表评论