using xdebug

使用xdebug不仅能够帮助我们调试程序,也赋予了我们断点调试和tarce以及性能分析的功能, 而开启这些功能都是很简单的一件时间, 就像我们使用Php一样。

常用配置

这是我的配置, 因为我喜欢使用虚拟机(虚拟机的配置非常类似于远程配置, 毕竟虚拟机与主机有时并不同在一个网段)

 [xdebug]

xdebug.force_display_errors=1
xdebug.cli_color=1
# 开启远程调试
xdebug.remote_enable=on
# 远程调试端口, xdebug 将调试信息发送到远程的端口
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM
xdebug.show_error_trace=1
# 如果开启了则自动开始调试, 不方便
# xdebug.remote_autostart = 1 
# 如果开启了此选项, 那么remote_host选项将不起作用
xdebug.remote_connect_back=1
# 远程端口, 安装phpstorm的用于调试的主机
xdebug.remote_host=192.168.115.1

# 最大子元素数目
xdebug.var_display_max_children=-1
#传输数据的最大长度
xdebug.var_display_max_data=-1
# 最大深度, default 3
xdebug.var_display_max_depth=-1
xdebug.dump.SERVER=REQUEST_URI,REQUEST_METHOD
xdebug.dump.GET = *
xdebug.dump.POST = *

#开启分析日志
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable_trigger_value=PROFILER
#如果开启,默认0文件会被覆写, 1 追加写
xdebug.profiler_append=0
#默认/tmp
xdebug.profiler_output_dir='/media/sf_sites/profiler'
xdebug.profiler_output_name='callgrind.%t'

xdebug.trace_enable_trigger=1
xdebug.trace_enable_trigger_value=TRACE
xdebug.trace_output_dir='/media/sf_sites/trace'
# 文件名 默认 trace.%c   %p  pid  %R REQUEST_URI  %H HTTP_HOST
xdebug.trace_output_name='trace.%R'

使用以上的配置, 那么xdebug的chrome扩展应该配置为

xdebug扩展配置 点击安装xdebug扩展

在windows下可以使用开源软件qcachegrind查看profiler详情。

毕竟xdebug生成的profiler文件可读性实在是不高(当然这可能对于一部分人是不适用的.)

  1. 点击下载qcachegrind
  2. 类unix使用kcachegrind
  3. 至于具体的使用, 应该是可以猜到的, 这里就不详细讲述了.

配置xdebug可能遇到的问题.

xdebug 不生效的几种原因

  1. 未开启监听, 要点亮phpstrom中的debug监听按钮,(一个类似电话一样的按钮)
  2. 查看是否成功监听指定配置的端口, 打开命令行窗口, 并运行命令netstat -ano |findstr " special port"
  3. 查看windows防火墙规则, 是否允许通过(被这个问题坑了很久), 打开widnows防火墙, 点击允许应用或功能通过防火墙,将phpstorm加入白名单即可, 或者点击高级设置将监听的端口加入入站规则中。
  4. 如果使用的是触发型的xdebug, 查看debug扩展是否启用.

断点逐步调试不生效的原因

点击断点之后, 断点是生效的, 但是无法逐步调试

如果是远程调试(虚拟机也属于远程)要设置本地项目与远程项目的文件映射, phpstorm的设置方法如下图所示 配置调试信息