2017-05-23 24 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

相關問題