Je débogue un script python et je veux regarder une variable pour un changement (un peu comme vous pouvez regarder une adresse mémoire dans gdb). Y a-t-il un moyen de faire cela?
Réponses
Trop de publicités?Ici est un hacky façon de le faire avec pdb
. Ces commandes peuvent être mis dans votre ~/.pdbrc
pour le chargement automatique chaque fois que vous utilisez pdb
.
!global __currentframe, __stack; from inspect import currentframe as __currentframe, stack as __stack
!global __copy; from copy import copy as __copy
!global __Pdb; from pdb import Pdb as __Pdb
!global __pdb; __pdb = [__framerec[0].f_locals.get("pdb") or __framerec[0].f_locals.get("self") for __framerec in __stack() if (__framerec[0].f_locals.get("pdb") or __framerec[0].f_locals.get("self")).__class__ == __Pdb][-1]
alias _setup_watchpoint !global __key, __dict, __val; __key = '%1'; __dict = __currentframe().f_locals if __currentframe().f_locals.has_key(__key) else __currentframe().f_globals; __val = __copy(%1)
alias _nextwatch_internal next;; !if __dict[__key] == __val: __pdb.cmdqueue.append("_nextwatch_internal %1")
alias _stepwatch_internal step;; !if __dict[__key] == __val: __pdb.cmdqueue.append("_stepwatch_internal %1")
alias nextwatch __pdb.cmdqueue.extend(["_setup_watchpoint %1", "_nextwatch_internal"])
alias stepwatch __pdb.cmdqueue.extend(["_setup_watchpoint %1", "_stepwatch_internal"])
Cela ajoute deux commandes, nextwatch
et stepwatch
qui prennent chacun un nom de variable varname comme argument. Ils vont faire une copie de l'image actuelle de la variable locale pour varname, si possible, et de garder de l'exécution d' next
ou step
, respectivement, jusqu'à ce que le nom des points de changements.
Cela fonctionne dans Disponible 2.7.2, mais s'appuie sur quelques - pdb
internes de sorte qu'il sera probablement casser ailleurs.