2017-05-23 1 views
0

Je sais que pdb est un système interactif et c'est très utile. Mon but ultime est de rassembler tous les états de mémoire après l'exécution de chaque commande dans certaines fonctions, commande par commande. Par exemple, avec un extrait de codeComment puis-je intégrer pdb dans mon programme? - Python

0: def foo() : 
1: if True: 
2: x=1 
3: else: 
4: x=2 
5: x 

alors l'état de la mémoire de chaque commande est

0: empty 
1: empty 
2: x = 1 
3: x = 1 
4: (not taken) 
5: x = 1 

Pour ce faire, ce que je voudrais faire avec pdb est d'écrire un script qui interagissent avec classe pdb. Je sais que s est une fonction pour avancer dans les déclarations et print var (dans le cas ci-dessus, var est x) est une fonction pour imprimer la valeur de certaines variables. Je peux rassembler des variables à chaque commande. Ensuite, je veux exécuter un script comme ci-dessous:

import pdb 
pdb.run('foo()') 
while(not pdb.end()): 
    pdb.s() 
    pdb.print('x') 

Mais je ne trouve pas comment implémenter cette fonctionnalité. Quelqu'un peut-il m'aider ??

Répondre

2

Essayez memory_profiler:

La ligne par ligne mode d'utilisation de la mémoire est utilisée beaucoup plus de la même manière de la line_profiler: d'abord décorer la fonction que vous souhaitez profil avec @profile puis exécutez le script avec un script spécial (dans ce cas avec des arguments spécifiques à l'interpréteur Python).

Line # Mem usage Increment Line Contents 
============================================== 
    3       @profile 
    4  5.97 MB 0.00 MB def my_func(): 
    5  13.61 MB 7.64 MB  a = [1] * (10 ** 6) 
    6 166.20 MB 152.59 MB  b = [2] * (2 * 10 ** 7) 
    7  13.61 MB -152.59 MB  del b 
    8  13.61 MB 0.00 MB  return a 

Ou Heapy:

L'objectif de Heapy est de soutenir le débogage et d'optimisation concernant questions liées à la mémoire dans les programmes Python.

Partition of a set of 132527 objects. Total size = 8301532 bytes. 
Index Count %  Size % Cumulative % Kind (class/dict of class) 
0 35144 27 2140412 26 2140412 26 str 
1 38397 29 1309020 16 3449432 42 tuple 
2 530 0 739856 9 4189288 50 dict (no owner) 
+0

Merci! Je pense que c'est exactement ce que je veux. Je vais essayer cette solution à mon projet. Merci beaucoup! – wooduckwooduck