2017-05-23 8 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의 목적은 파이썬 프로그램에서 메모리 관련 문제에 대한 디버깅 및 최적화를 지원하는 것입니다.

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