2017-01-11 5 views
0

저는 현재 파이썬 플라스크 프로그램의 디버그 메모리 사용에 노력하고있어, 나는 추가하여 PDB에서 프로그램을 실행할 수 있어요 : 내 서버의 진입 점에서PDB에서 Python Flask 서비스를 실행하는 동안 어떻게 일시 중지/중단합니까?

import pdb 
pdb.set_trace() 

. 그런 다음 PDB에 프로그램을 계속 실행하라고 지시합니다.

나는 Ctrl-C를 수행하여, 내가 PDB에서 실행되는 프로그램을 일시 정지 할 수 있습니다 읽었습니다,하지만 플라스크가 KeyboardInterrupt 예외를 잡는 나타납니다

^CKeyboardInterrupt 
Traceback (most recent call last): 
    File "./server.py", line 4, in <module> 
    from mauie.defaults import * 
    File "/lib/python2.7/site-packages/flask_socketio/__init__.py", line 414, in run 
    File "/lib/python2.7/site-packages/gevent/baseserver.py", line 284, in serve_forever 
    File "/lib/python2.7/site-packages/gevent/event.py", line 77, in wait 
    File "/lib/python2.7/site-packages/gevent/hub.py", line 338, in switch 
KeyboardInterrupt 

그러나 PDB의 프롬프트가 제공되지 않습니다.

+0

왜 ctrl-c를 눌러도 PDB가 실행된다고 생각하는 이유를 모릅니다. 코드를 중단시키려는 중단 점을 만들어야합니다. –

+0

http://intackoverflow.com/questions/10239760/interrupt-pause-running-python-program-in-pdb -이 질문은 가능한 언급이며 Flask 외부에서 작동합니다. 그 플라스크가 예외를 가로 채서 PDB가 결코 그것을 보지 못하게합니다. – Charlie

답변

0

set_trace()는 단순히 파이썬 함수이므로 코드의 어느 지점에서나 호출 할 수 있습니다. 단순히 코드에 중단 점을 추가하고 메모리를 그렇게 보았습니까?

+0

그게 문제입니다. 저는 메모리 문제를 찾아 내려고 노력하고 있지만 코드가 어디에서 발생하는지 알지 못합니다. 문제가 발생했을 때 프로세스를 일시 중지하고 거기에서 조사 할 수있게하고 싶습니다. – Charlie

+0

정말로 메모리 문제 일뿐입니다. 아마도 프로파일 러를 사용하는 것이 더 나을 것입니다. 순수 메모리 프로파일 러를 포함하여 파이썬에 사용할 수있는 몇 가지 프로파일 러가 있습니다 : [pypi/memory_profiler] (https://pypi.python.org/pypi/memory_profiler) – nikijean