美好的一天。
我一直致力于项目,其中包含许多变量和会话,以及大部分工作已经完成的工作"引擎盖下#34;并通过ajax。
问题是我尝试调试我的项目,但我找不到任何方法来跟踪和记录对某个变量所做的更改。
我一直在尝试使用firephp和xdebug,但是他们不会显示变量的变化,只有最终值。
任何解决方案?
答案 0 :(得分:1)
可能会被记录decorator可以帮到你吗?
如果要跟踪某些实例变量,可以使用实现相同接口的装饰器来包装它们。在装饰器方法中,您可以编写调试级别日志,然后将工作流程转换为保存为装饰器对象字段的原始变量。
答案 1 :(得分:1)
XDebug可以跟踪变量,只需启用xdebug.collect_assignments
和xdebug.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
。