如何在程序中嵌入pdb? - Python

时间:2017-05-23 15:16:29

标签: python embed pdb

我知道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')

但是我找不到任何方法来实现这个功能。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

尝试memory_profiler

  

逐行内存使用模式的使用方式与之相同   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)