2017-05-23 4 views
0

私はpdbがインタラクティブシステムであり、非常に役に立ちます。 私の最終的な目標は、特定の機能で各コマンドを実行した後、コマンドごとにすべてのメモリ状態を収集することです。例えば、コードスニペットで私のプログラムにpdbを埋め込むには? - Python

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

は、各コマンドのメモリ状態が

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

これを行うには、私はPDBをどうしたいことと対話するスクリプトを書くことですpdbクラス。私はsがステートメントで前方に進む関数であり、print var(上記の場合、varはx)が特定の変数の値を出力する関数であることを知っています。私は各コマンドで変数を集めることができます。次に、私は以下のようなスクリプトを実行したい:

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

しかし、私はこの機能を実装する方法を見つけることができません。誰も私を助けることができますか?

答えて

2

memory_profilerをお試しください:

ライン・バイ・ラインのメモリ使用量モードは line_profilerのと同じようにあまり使用されている:最初にあなたが@profileで をプロファイルしたい機能を飾るし、次に実行します特別なスクリプト(この のケースでは、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 

またはHeapy

Heapyの目的は、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

ありがとうございます!私はこれがまさに私が欲しいものだと思う。私は私のプロジェクトにこの解決策を試みます。どうもありがとう! – wooduckwooduck

関連する問題