[python] Python 자체 디버거 (PDB) 내에서 여러 줄 명령문을 실행하는 방법

그래서 나는 파이썬 스크립트를 실행하고 있는데 파이썬 스크립트를 PDB라고 부릅니다.

import ipdb; ipdb.set_trace()

(iPython의 PDB 버전은 차이가 없다고 생각하지만 컬러 출력에만 사용합니다).

이제 디버거에 도착하면 if 절이나 for 루프와 같은 여러 줄 문을 실행하려고하지만 입력하자마자

if condition:

리턴 키를 누르면 오류 메시지가 나타납니다. *** SyntaxError: invalid syntax (<stdin>, line 1)

PDB 내에서 여러 줄로 된 문장을 어떻게 실행할 수 있습니까? 가능하지 않은 경우 if 절이나 for 루프를 계속 실행하는 방법이 있습니까?



답변

pdb에서 사용 가능한 모든 로컬 변수를 사용하여 임시 대화식 Python 세션을 시작하는 동안이 작업을 수행 할 수 있습니다.

(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

완료되면 Ctrl-D를 사용하여 일반 pdb 프롬프트로 돌아갑니다.

Ctrl-C를 누르지 않으면 전체 pdb 세션이 종료됩니다.


답변

python3 ipdb(및 pdb)에는 interact 이라는 명령이 있습니다. 다음과 같은 용도로 사용할 수 있습니다.

글로벌 네임 스페이스에 현재 범위에서 찾은 모든 (글로벌 및 로컬) 이름이 포함 된 대화식 인터프리터 ( 코드 모듈 사용)를 시작하십시오 .

사용하려면 interactpdb 프롬프트에서 간단히 입력하십시오 . 무엇보다도 여러 줄에 걸친 코드를 적용하고 실수로 다른 pdb 명령이 트리거되는 것을 피하는 데 유용합니다.


답변

내 권장 사항은 IPython 포함을 사용하는 것입니다.

ipdb> from IPython import embed; embed()


답변

Python (2.7.1) 인터프리터 또는 디버거 (import pdb) 내에서 다음 구문으로 여러 줄 명령문을 실행할 수 있습니다.

for i in range(5): print("Hello"); print("World"); print(i)

참고 : 인터프리터 안에있을 때 코드가 실행되기 전에 return을 두 번 눌러야합니다. 그러나 디버거 내에서는 return을 한 번만 누르면됩니다.


답변

중단 점에 도달 할 때 몇 개의 명령을 실행하려는 경우 특별한 경우가 있습니다. 그런 다음 디버거 명령이 commands있습니다. 여러 줄의 명령을 입력 한 다음 end키워드로 전체 시퀀스를 끝낼 수 있습니다. 로 더 (pdb) help commands.


답변

나는 당신이 이것을 할 수 있는지 모르겠다. 그러나 그것은 ipdb에 대한 훌륭한 기능 일 것이다. 물론 목록 이해를 사용하고 다음과 같은 간단한 여러 줄 표현을 실행할 수 있습니다.

if y == 3: print y; print y; print y;

또한 일반적으로 여러 줄이 필요한 작업을 수행하기 위해 일부 함수를 미리 작성할 수도 있습니다.


답변