programing

PDB 중단점을 파이썬 코드에 넣는 더 간단한 방법은 무엇입니까?

stoneblock 2023. 7. 18. 21:28

PDB 중단점을 파이썬 코드에 넣는 더 간단한 방법은 무엇입니까?

그냥 편의상의 질문입니다.저는 Visual Studio와 XCode와 같은 IDE의 디버거에 대해 약간 화가 났습니다.타이핑을 해야 하는 것이 좀 서툴다고 생각합니다.import pdb; pdb.set_trace()중단점을 설정합니다(잊어서 파일의 맨 위에 있는 pdb를 가져오지 않습니다).

IDE에서 보는 것처럼 간단하고 눈에 띄지 않는 파이썬 코드의 중단점을 설정하는 더 간단한 방법이 있습니까?

을 프그램을수있다니로 할 수 .pdb에서 를

python -mpdb your_script.파이의

그것은 첫 번째 줄에서 끊어질 것이고, 그리고 나서 당신은 당신의 코드에서 원하는 곳 어디든 브레이크포인트를 추가할 수 있을 것입니다.break명령의 구문은 다음과 같습니다.

b(reak) [[reak:]lineno | 함수[, 조건]

어디서나 중단점을 추가할 수 있을 정도로 유연합니다.

사용할 수 있는 항목:

from pdb import set_trace as bp

code
code
bp()
code
code

아직 시도하지 않았지만 Python 3.7에 브레이크포인트()라는 새로운 기본 제공 기능을 구현했습니다. 즉, 이제 브레이크포인트를 하나의 문으로 삽입할 수 있습니다.

breakpoint()

vim에서 다음을 위해 매크로를 설정했습니다(내 .vimrc 파일).

map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

따라서 \b(삽입 모드가 아닐 때)를 누르면 현재 줄 뒤에 중단점이 추가되거나 \B(대문자와 함께)가 추가되고 현재 줄 앞에 중단점이 추가됩니다.

그것은 잘 작동하는 것처럼 보입니다.대부분의 다른 '간단한' 프로그래머 편집자(이맥, 서브프라임 텍스트 등)는 이를 위한 유사하고 쉬운 방법을 가지고 있어야 합니다.

편집: 실제로 다음이 있습니다.

au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

파이썬 소스 파일에 대해서만 설정합니다.당신은 자바스크립트나 당신이 사용하는 다른 언어에 대해 유사한 행을 매우 쉽게 추가할 수 있습니다.

2019 업데이트(파이썬 3.7+)**

3된 제Python 3.7+에장있습다니이내를 가지고 .breakpoint()는 앞의 것대을수있는할을 할 수 .import pdb; pdb.set_trace()합니다.여전히 똑같이 작동합니다.

2021년 업데이트

그래서 저는 요즘 django를 많이 하고 있고, ipdb 디버거도 사용하고 있고, 자바스크립트와 HTML 템플릿도 사용하고 있습니다. 그래서 이제 다음과 같은 것들을 가지고 있습니다.

function InsertDebug()
    if &filetype == "python"
        execute "normal! oimport ipdb;ipdb.set_trace()\<esc>"
    elseif &filetype == "javascript"
        execute "normal! odebugger;\<esc>"
    elseif &filetype == "html" || &filetype == "htmldjango"
        execute "normal! o{% load debugger_tags %}{{ page\|ipdb }}\<esc>4bcw"
    else
        echoerr "Unknown filetype - cannot insert breakpoint"
    endif
endfunction
nmap <leader>b <esc>:call InsertDebug()<CR>

그래서 나는 둘 중 하나를 받습니다.ipdb중단점 또는 해당 언어의 다른 언어 중단점.그러면 이것은 다른 언어로도 쉽게 확장할 수 있습니다.더 나은 자동 명령을 사용하여 이 작업을 수행할 수 있다고 생각합니다. 하지만 이렇게 안정적으로 작업할 수는 없었습니다.

프로그램을 실행할 때마다 브레이크포인트를 수동으로 설정하지 않으려면(Python 3.2+에서는), 예를 들어 3행에서 브레이크포인트를 직접 만들고 실행을 중지하고 싶다고 합니다.

python -m pdb -c "b 3" -c c your_script.py

다음 정보가 도움이 될 수 있습니다.

.pdbrc 파일이 사용자의 홈 디렉터리나 현재 디렉터리에 있으면 디버거 프롬프트에서 입력한 것처럼 파일을 읽고 실행합니다.이 기능은 별칭에 특히 유용합니다.두 파일이 모두 존재하는 경우 홈 디렉토리에 있는 파일이 먼저 읽혀지며, 홈 디렉토리에 정의된 별칭은 로컬 파일에 의해 재정의될 수 있습니다.

버전 3.2에서 변경된 .pdbrc에는 이제 계속 또는 다음과 같은 디버깅을 계속하는 명령이 포함될 수 있습니다.이전에는 이러한 명령이 적용되지 않았습니다.

버전 3.2의 새로운 기능: pdb.py 에서는 이제 .pdbrc 파일에 지정된 것처럼 명령을 실행하는 -c 옵션을 사용할 수 있습니다. 디버거 명령을 참조하십시오.

  • 출처: https://docs.python.org/3.2/library/pdb.html

소스 코드에 아무것도 구현하지 않고 명령줄에서 pdb를 사용하는 방법은 다음과 같습니다(문서 및 기타 온라인 리소스는 과거에 비주얼 디버거만 사용한 프로그래머에게 이를 설명하는 데 도움이 되지 않습니다).

셸 프롬프트에 다음을 입력하여 pdb를 시작합니다.

python -m pdb 'python_script'

이 명령은 pdb를 초기화하고 pdb 디버거는 python_script의 첫 줄에서 중단하고 사용자의 입력을 기다립니다.

(Pdb)

디버거와 통신하기 위한 인터페이스입니다.이제 여기서 명령을 지정할 수 있습니다.시각적 디버거에서 버튼이나 키보드 단축키를 사용하는 대신 명령을 사용하여 동일한 결과를 도출합니다.

명령 "n"(다음)을 사용하여 코드의 다음 행으로 이동할 수 있습니다.

(Pdb) n

다음을 수행하면 라인 번호와 소스의 특정 코드가 표시됩니다.

> python_script(line number)method name
-> current line in the source code

소스 코드에 줄 번호를 지정하여 중단점을 설정할 수 있습니다.

(Pdb) b 50

여기서 디버거는 줄 50에서 중단되도록 설정됩니다.다른 중단점이 없는 경우 줄 50의 중단점이 첫 번째가 되며 이 경우 중단점 ID(1)로 참조될 수 있습니다.중단점을 더 추가하면 식별자가 순차적으로 표시됩니다(예: 2, 3 등).

중단점이 설정되면 다음과 같이 pdb가 중단점에 도달할 때까지 프로그램을 계속 실행할 수 있습니다.

(Pdb) c

중단점에 도달하면 앞에서 설명한 대로 n 명령을 사용하여 다음 줄로 이동할 수 있습니다.변수 값을 검사하려면 다음과 같이 매개 변수 명령을 실행합니다.

(Pdb) p variable_name

중단점이 더 이상 필요하지 않은 경우 clear 명령을 사용하여 중단점 ID를 전달하여 중단점을 지울 수 있습니다.

(Pdb) clear 1

마지막으로 디버거를 마치면 python 명령줄 인터프리터를 종료하는 것처럼 실행을 종료할 수 있습니다.

(Pdb) exit()

이것이 누구든 pdb를 시작하는 데 도움이 되기를 바랍니다.다음은 디버거와 함께 사용할 수 있는 명령 목록입니다. pdb는 질문과 대답입니다.

파이3.7에는 중단점을 설정하는 새로운 기본 제공 방식이 있습니다.

breakpoint()

여기 더 보기 https://stackoverflow.com/a/53263117/6488361

파이썬 디버깅을 지원하는 IDE를 사용하거나 훌륭한 Winpdb 도구를 확인할 수 있습니다.모든 플랫폼에서 작동하며 파이썬 스크립트에 그래픽 디버깅 기능을 제공합니다.

http://winpdb.org/

사용할 수 있는 항목:

  • 윙사이드
  • pydev 플러그인으로 이클립스
  • 불꽃놀이

위의 모든 것은 IDE 내부에서 파이썬 디버깅을 지원합니다.

(잊어서 두고 갈 수도 있기 때문에 파일 맨 위에 pdb를 가져오지는 않겠습니다.)

와는 달리

import pdb; pdb.set_trace()

이것은 수입 부분을 남길 수 있습니다. 이것은 "원자적"입니다.

__import__('pdb').set_trace()

, 별칭 및 에서 .사용한 입니다.python -m pdb <scriptname>.py

한 줄에 pdbone처럼 명령을 입력합니다.예:

.\.pdbrc
--------
b 12
display var
c

Atom에서 Python 플러그인이 설치된 경우 '를 입력하면 됩니다.pdbEnter 키를 누르면 가져오기 및 추적을 입력합니다.

vim에서 편집하고 드롭다운이 뜨기를 기다려도 그냥 입력하는 경우가 있어서 이제는 익숙합니다.

Vim을 Python-Mode 플러그인과 함께 사용하거나 Emacs를 Elpy 플러그인과 함께 사용할 수 있습니다.

은 쉬운 키합니다.\ b과 에빔에서C-c C-u b또한 경량 터미널 기반 텍스트 편집기에 포함된 헤비급 IDE(코드 폴딩, 리팩토링, 보풀링 등)의 다양한 기능을 제공합니다.

이 스니펫을 사용하여 중단점을 자동으로 설정할 수 있습니다.

import pdb
import sys
try:
    from io import StringIO           # Python3
except:
    from StringIO import StringIO     # Python2

bp = 14    # or e.g. "submodule.py:123"

sys.stdin = StringIO('break %s\ncont\n' % bp)
pdb.set_trace()
sys.stdin = sys.__stdin__   # reset to usually stdin

print(1)     # lineno 14
print(2)

이 접근 방식은 Python 2 및 3에서 작동합니다.

은 중점은다설수있도습다니정할을 통해 ..pdbrc파일(파일 또는 가정 내) 및 즉시 조작할 수 있습니다.그도래.cont명령을 수동으로 실행하면 안 됩니다.그래서 그 이후로pdb.set_tracestdin이 필요합니다. 위의 코드는 명령을 프로그래밍 방식으로 stdin으로 "변환"합니다.

코드를 메인 프로그램 안에 넣고 다음과 결합하는 것.argparse중단점은 명령줄에서 중단점까지 추가 정지와 함께 전달될 수 있습니다.

스크립트에서 디버거를 실행하는 가장 간단한 방법은

pdb your_script.py

리눅스 명령줄에서 pdb를 실행하면

usage: pdb.py scriptfile [arg] ...

언급URL : https://stackoverflow.com/questions/6980749/simpler-way-to-put-pdb-breakpoints-in-python-code