pdb를 종료하고 프로그램을 계속하는 방법은 무엇입니까?


111

프로그램을 디버깅하기 위해 pdb 모듈을 사용하고 있습니다. pdb를 종료하고 프로그램이 계속해서 완료되도록 허용하는 방법을 알고 싶습니다. 이 프로그램은 실행하는 데 계산 비용이 많이 들기 때문에 스크립트가 완료되지 않고 종료하고 싶지 않습니다. continue작동하지 않는 것 같습니다. pdb를 종료하고 내 프로그램을 계속하려면 어떻게해야합니까?


2
continue종료 루프 return종료 방법 / 기능
스테판

7
@Stephan : 그는 continuepdb 명령 에 대해 이야기하고 있습니다. Python 문이 아닙니다.
voithos jul.

1
@turtle : continue문서에 따르면 "실행을 계속하고 중단 점이 발생할 때만 중지"해야합니다. 적중되는 중단 점 세트가 있습니까?
voithos

1
아. 알 겠어. 네, 루프 안에 중단 점이 설정되어 있습니다. 어쨌든이 문제를 해결하려면? 루프가 수천 번 호출 되었기 때문에 계속해서 계속 눌렀습니다.
거북이

1
@turtle : Pdb 내에서 중단 점이 설정되어 pdb.set_trace()있습니까 , 아니면 소스 코드에 있습니까?
voithos

답변:


190

continue"실행을 계속하고 중단 점이 발생할 때만 중지"해야합니다. 따라서 중단 점이 어딘가에 설정되어 있습니다. 중단 점을 제거하려면 (수동으로 삽입 한 경우) :

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

또는을 사용 pdb.set_trace()하고 있다면 이것을 시도해 볼 수 있습니다 (pdb를 더 멋진 방법으로 사용하고 있다면 이것은 일을 망칠 수 있습니다 ...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!

10
위는 pdb를 종료 하지 않습니다 .
Steve Barnes

7
질문의 15 번째 단어에 대해!
Steve Barnes

13
@SteveBarnes : 나는 당신이 그것을 너무 문자 그대로 받아들이고 있다고 생각합니다. OP는 중단 점에 계속해서 도달하고 있습니다. 필요한 것은 중단 점에 도달하지 않고 장기 실행 프로세스를 계속하는 것입니다. Pdb가 실제로 실행 중인지 여부는 중요하지 않습니다.
voithos

35
설정에 좋은 팁 set_trace = lambda: None:
randlet

2
극단적 인 경우에는 set_trace = lambda: None. Python 조직은 pdb에서 벗어날 수있는 명령을 추가해야합니다.
ErezO

26

간단한 Ctrl - DPDB의 탈옥 것입니다. 중단하지 않고 계속 c하려면 전체 continue명령 대신 누르십시오.


6
함수 내부, 루프 내부에있을 때 어떨까요? 나를 위해 다음 루프로 이동하는 것 같고 전체 터미널을 닫지 않고 실제로 pdb를 닫거나 파이썬을 닫을 수 없습니까?
Marses

@LimokPalantaemon 이상한, 당신은 입력 시도가exit
호치민 Triet

트레이스를 설정했거나 계속해서 c를 누르지 않는 한 중단 점이있는 경우에는 작동하지 않습니다.
Alex

당황하지만, 이것은 -_- 너무 오래 갇혀되는 저를 저장
jmcg

7

@voithos 의 대답 은 정확하므로 .NET을 사용하는 경우 하나의 대안 만 추가하겠습니다 set_trace. 예, pdb.set_trace = lambda: None해킹은 정상적으로 작동하지만 다른 중단 점이 설정되어 있고 나중에 다시 활성화하려는 경우에는 작동하지 않습니다. 나에게 이것은 불행하게도 pdb많은 기능 (디스플레이 목록과 같은 기본적인 것조차도)이 없다는 사실을 가리키며 , 이것은 또 다른 경우입니다.

좋은 소식은을 (를 pdb++) 대체 할 수있는 훌륭한 pdb방법이며이 기능이 해결하는 것 중 하나는 정확히을 (를) 비활성화하는 문제입니다 set_trace. 따라서 간단하게 다음을 수행 할 수 있습니다.

pip install pdbpp

그런 다음 (Pdb++)프롬프트 에서 다음을 입력합니다.

pdb.disable()

나중에 다시 활성화하려면 당연히 다음과 같이 작동합니다.

pdb.enable()

쉬운! 그리고 그 위에 다른 많은 유용한 혜택을 얻을 수 있습니다.


4

정말로 디버거를 종료하려면 WinPdb 와 같은 것을 실행 하여 프로세스에서 분리 한 다음 디버거를 종료해야합니다 (NB는 다중 플랫폼입니다).

디버깅을 계속하고 싶지만 더 이상 주어진 중단 점에서 중지하지 않으려면 다음을 수행해야합니다.

  1. 중단 점 번호 (또는 파일 및 줄 번호)를 기록해 둡니다.
  2. 하나 cl bp_number 또는 clear file:line 영구적으로 중단 점을 제거하기 위해 또는 disable pb_number 그것을 떨어져 전환하지만 다시 전환 할 수 있도록.
  3. 그런 다음 continue프로그램이 다음 다른 중단 점에 도달 할 때까지 실행 됩니다.

위의 자세한 내용 은 설명서를 참조하십시오 .


0

아무것도 설치하지 않고 pdb를 종료하는 새로운 방법을 찾으십시오.-프로그램이 실행되기 시작하면 ctrl + c를 누른 다음 창을 다른 창 (모든 창)으로 전환하면 pdb가 실행중인 원래 셸에 다음과 같은 내용이 표시됩니다. (pdb) .....-pdb로 다시 전환 한 다음 Enter 키를 누릅니다. 이제 모든 설정이 완료되었습니다. pdb 명령 쉘이 다시 나타납니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.