如何跟踪PHP中的变量更改

时间:2013-06-08 18:49:01

标签: php debugging xdebug firephp

美好的一天。

我一直致力于项目,其中包含许多变量和会话,以及大部分工作已经完成的工作"引擎盖下#34;并通过ajax。

问题是我尝试调试我的项目,但我找不到任何方法来跟踪和记录对某个变量所做的更改。

我一直在尝试使用firephp和xdebug,但是他们不会显示变量的变化,只有最终值。

任何解决方案?

2 个答案:

答案 0 :(得分:1)

可能会被记录decorator可以帮到你吗?

如果要跟踪某些实例变量,可以使用实现相同接口的装饰器来包装它们。在装饰器方法中,您可以编写调试级别日志,然后将工作流程转换为保存为装饰器对象字段的原始变量。

答案 1 :(得分:1)

XDebug可以跟踪变量,只需启用xdebug.collect_assignmentsxdebug.collect_params,因此当您生成跟踪日志文件时,您应该会看到更改。

示例配置:

xdebug.default_enable = 1           ; bool: The stacktraces will be shown by default on an error event.
xdebug.collect_vars = 1             ; bool: Gather information about which variables are used in a certain scope.
xdebug.show_local_vars=1            ; int: Generate stack dumps in error situations.
xdebug.collect_assignments=1        ; bool: Controls whether Xdebug should add variable assignments to function traces.
xdebug.collect_params=4             ; int1-4: Collect the parameters passed to functions when a function call is recorded.
xdebug.collect_return=1             ; bool: Write the return value of function calls to the trace files.
xdebug.var_display_max_children=256 ; int: Amount of array children and object's properties are shown.
xdebug.var_display_max_data=1024    ; int: Max string length that is shown when variables are displayed.
xdebug.var_display_max_depth=5      ; int: How many nested levels of array/object elements are displayed.
xdebug.trace_output_dir="/var/log/xdebug" ; string: Directory where the tracing files will be written to.

然后在第一次分配变量之前或之后,通过将代码添加到PHP代码中来开始跟踪代码:

xdebug_start_trace();

然后选择在您认为已经发生的一端添加xdebug_stop_trace();

然后检查在配置目录中生成的文件(由xdebug.trace_output_dir指定)。 如果文件很大,请使用grep按特定变量对其进行过滤,例如

grep --color=auto variable trace-log.xt

或通过以下方式将其过滤到较小的文件中:grep pattern trace-log.xt > smaller.log.txt

另一种选择是使用phpdbg