我知道pdb是一个交互式系统,它非常有用。 我的最终目标是在执行每个命令后,在命令中逐个命令地收集所有内存状态。例如,使用代码段
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')
但是我找不到任何方法来实现这个功能。任何人都可以帮助我吗?
答案 0 :(得分:2)
逐行内存使用模式的使用方式与之相同 line_profiler:首先装饰你想要分析的功能 使用@profile然后使用特殊脚本运行脚本(在此处 具有Python解释器特定参数的case。)。
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)