2013-06-08 3 views
4

Bonne journée.Comment suivre les changements de variables en PHP

J'ai travaillé sur un projet qui contient beaucoup de variables et de sessions et où la plupart du travail est fait "sous le capot" et via ajax. Le problème est que j'essaie de déboguer mon projet et que je ne trouve aucun moyen de suivre et de consigner les modifications apportées à une variable donnée.

J'ai essayé d'utiliser firephp et xdebug, mais ils ne montrent pas quand des changements ont été apportés à la variable, seulement sa valeur finale.

Une solution?

+1

Je comprends ce que vous voulez faire, mais pourquoi, quelle est la raison? – KyleK

+0

si vous voulez faire est manuellement puis à chaque changement de variable vous ne pouvez pas assigner des valeurs variables au tableau comme '$ logs [] = $ variable;' mais vous le faites à chaque changement à la fin juste 'dump ($ logs) ' –

+0

Dans les classes, vous pouvez le faire en utilisant' __set' – kelunik

Répondre

1

Peut être enregistré decorator peut vous aider?

Si vous voulez suivre certaines variables d'instance, vous pouvez les entourer avec un décorateur qui implémente la même interface. Et dans les méthodes de décorateur, vous pouvez écrire le journal de niveau de débogage, puis redéfinir le flux de travail aux variables d'origine enregistrées en tant que champ d'objet décorateur.

1

XDebug peut suivre les changements de variables, il suffit d'activer xdebug.collect_assignments et xdebug.collect_params, alors lorsque vous générez le fichier journal de suivi, vous devriez voir les changements.

Exemple de configuration:

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. 

Ensuite, avant ou après avoir affecté la variable pour la première fois, commencer à tracer le code en ajoutant ceci dans votre code PHP:

xdebug_start_trace(); 

puis éventuellement ajouter xdebug_stop_trace(); à la fin où vous pensez que c'est déjà arrivé.

Ensuite, vérifiez le fichier généré dans le répertoire configuré (spécifié par xdebug.trace_output_dir). Si le fichier est volumineux, filtrez-le par variable spécifique à l'aide de grep, par ex.

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

ou filtrer dans le fichier plus petit par: grep pattern trace-log.xt > smaller.log.txt. Une autre alternative consisterait à utiliser phpdbg.

Questions connexes