찾다
백엔드 개발파이썬 튜토리얼일반적으로 사용되는 Python 디버깅 도구, Python 개발을 위해 꼭 읽어야 할 책

로그

네, 로그입니다. 애플리케이션에서 적절한 로그를 유지하는 것의 중요성은 아무리 강조해도 지나치지 않습니다. 중요한 내용을 기록해야 합니다. 로그가 충분하다면 로그만 봐도 문제를 찾을 수 있습니다. 그러면 시간이 많이 절약됩니다.

코드에 인쇄 문을 사용했다면 지금 중단하세요. 대신 login.debug를 사용하세요. 나중에 계속해서 재사용하거나 모두 비활성화할 수 있습니다.

추적

때로는 어떤 문이 실행되었는지 확인하는 것이 더 나은 접근 방식입니다. 일부 IDE의 디버거를 사용하여 단계별로 진행할 수 있지만 찾고 있는 명령문이 무엇인지 정확히 알아야 합니다. 그렇지 않으면 전체 프로세스가 매우 느리게 진행됩니다.

표준 라이브러리의 추적 모듈은 런타임 중에 포함된 모듈에서 실행된 모든 명령문을 인쇄할 수 있습니다. (프로젝트 보고서 작성과 유사)

python -mtrace –trace script.py

이렇게 하면 많은 출력이 생성됩니다(실행된 모든 줄이 인쇄됩니다. grep을 사용하여 관심 있는 모듈을 필터링하세요.

예:

python -mtrace –trace script.py | egrep '^(mod1.py|mod2.py)'

Debugger

다음은 A 지금쯤이면 잘 알아야 할 기본 소개:

import pdb
pdb.set_trace() # 开启pdb提示

또는

try:
(一段抛出异常的代码)
except:
    import pdb
    pdb.pm() # 或者 pdb.post_mortem()
  或者(输入 c 开始执行脚本)

python -mpdb script.py

입력-계산-출력 루프(참고: REPL, READ-EVAL-PRINT-LOOP의 약어) 환경에서는 다음을 수행할 수 있습니다. 다음 작업:

c 또는 계속

q 또는 종료

l 또는 목록, 현재 단계 프레임의 소스 코드 표시

w 또는 where , 호출 프로세스 추적

d 또는 아래로, 한 프레임 뒤로 이동(참고: 롤백과 동일)

u 또는 위로, 한 프레임 앞으로 이동

(Enter) , 이전 명령 반복

거의 모든 명령(몇 가지 다른 명령 제외)은 현재 단계 프레임에서 Python 코드로 구문 분석됩니다.

충분히 어렵지 않다고 생각되면 스마일리를 사용해 보세요. 변수를 표시하고 프로그램을 원격으로 추적하는 데 사용할 수 있습니다.

더 나은 디버거

pdb를 직접 대체:

ipdb(easy_install ipdb) - ipython과 유사(자동 완성, 색상 표시 등)

pudb(easy_install pudb) – Curs 기반(그래픽 인터페이스 인터페이스와 유사), 특히 소스 코드 탐색에 적합

원격 디버거

설치 방법:

sudo apt-get winpdb 설치

이전 pdb.set_trace()를 다음 방법으로 바꾸세요:

import rpdb2
rpdb2.start_embedded_debugger("secretpassword")

이제 winpdb, file-association을 실행하세요

Winpdb가 마음에 들지 않으세요? PDB를 직접 래핑하여 TCP 위에서 실행할 수도 있습니다!

다음을 수행하세요.

import loggging
class Rdb(pdb.Pdb):
    """
    This will run pdb as a ephemeral telnet service. Once you connect no one
    else can connect. On construction this object will block execution till a
    client has connected.
  
    Based on https://github.com/tamentis/rpdb I think ...
  
    To use this::
  
        Rdb(4444).set_trace()
  
    Then run: telnet 127.0.0.1 4444
    """
    def __init__(self, port=0):
        self.old_stdout = sys.stdout
        self.old_stdin = sys.stdin
        self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.listen_socket.bind(('0.0.0.0', port))
        if not port:
            logging.critical("PDB remote session open on: %s", self.listen_socket.getsockname())
            print >> sys.__stderr__, "PDB remote session open on:", self.listen_socket.getsockname()
            sys.stderr.flush()
        self.listen_socket.listen(1)
        self.connected_socket, address = self.listen_socket.accept()
        self.handle = self.connected_socket.makefile('rw')
        pdb.Pdb.__init__(self, completekey='tab', stdin=self.handle, stdout=self.handle)
        sys.stdout = sys.stdin = self.handle
  
    def do_continue(self, arg):
        sys.stdout = self.old_stdout
        sys.stdin = self.old_stdin
        self.handle.close()
        self.connected_socket.close()
        self.listen_socket.close()
        self.set_continue()
        return 1
  
    do_c = do_cont = do_continue
  
def set_trace():
    """
    Opens a remote PDB on first available port.
    """
    rdb = Rdb()
    rdb.set_trace()

REPL 환경을 원하시나요? IPython을 사용해 보는 것은 어떻습니까?

완전한 디버거가 필요하지 않은 경우 다음 방법으로 IPython을 시작하기만 하면 됩니다.

import IPython
IPython.embed()

표준 Linux 도구

저는 이러한 도구가 얼마나 활용도가 낮은지 보고 종종 놀랐습니다. 이러한 도구를 사용하면 성능 문제(너무 많은 시스템 호출, 메모리 할당 등)부터 교착 상태, 네트워크 문제, 디스크 문제 등에 이르기까지 광범위한 문제를 해결할 수 있습니다.

가장 유용한 것은 가장 직접적인 strace입니다. sudo strace -p 12345 또는 strace -f 명령만 실행하면 됩니다(-f는 동시에 포크에서 나오는 하위 프로세스를 추적하는 것을 의미합니다. 시간) 그게 다입니다. 출력은 일반적으로 매우 크므로 추가 분석을 위해 파일로 리디렉션할 수 있습니다(파일 이름에 &>만 추가하면 됩니다).

그리고 strace와 다소 유사한 ltrace가 있습니다. 차이점은 라이브러리 함수 호출을 출력한다는 것입니다. 매개 변수는 거의 동일합니다.

ltrace/strace에서 볼 수 있는 핸들 값의 의미를 나타내는 데 사용되는 lsof도 있습니다. 예:

lsof -p 12345

더 나은 추적

사용하기 쉽지만 많은 일을 할 수 있습니다. 모두가 htop을 설치해야 합니다!

sudo apt-get install htop

sudo htop

이제 원하는 프로세스를 찾아 다음을 입력하세요.

s - 시스템 호출 프로세스를 나타냅니다(비슷함) strace)

L - 라이브러리 호출 프로세스를 나타냅니다(ltrace와 유사)

l - lsof를 나타냅니다.

모니터링

좋은 연속 서버가 없습니다. 모니터링하지만 모든 것이 왜 그렇게 느리게 실행되는지와 같은 이상한 상황에 직면한 경우 해당 시스템 리소스는 무엇을 하고 있습니까? . . 이러한 문제를 이해하고 싶지만 시작할 곳이 없다면 iotop, iftop, htop, iostat, vmstat와 같은 도구를 사용할 필요 없이 dstat만 사용하세요! 이전에 언급한 대부분의 작업을 수행할 수 있으며 어쩌면 더 나은 작업도 수행할 수 있습니다!

코드 강조 방식으로 간결하게 데이터를 지속적으로 표시하며(iostat, vmstat와 다름) 과거 데이터를 자주 볼 수 있습니다(iftop, iostop, htop과 다름).

다음을 실행하세요:

dstat --cpu --io --mem --net --load --fs --vm --disk-util --disk-tps -- freespace --swap --top-io --top-bio-adv

很可能有一种更简短的方式来写上面这条命令,

这是一个相当复杂而又强大的工具,但是这里我只提到了一些基本的内容(安装以及基础的命令)

sudo apt-get install gdb python-dbg

zcat /usr/share/doc/python2.7/gdbinit.gz > ~/.gdbinit

用python2.7-dbg 运行程序:

sudo gdb -p 12345

现在使用:

bt - 堆栈跟踪(C 级别)

pystack - python 堆栈跟踪,不幸的是你需要有~/.gdbinit 并且使用python-dbg

c - 继续

  发生段错误?用faulthandler !


  python 3.3版本以后新增的一个很棒的功能,可以向后移植到python2.x版本。只需要运行下面的语句,你就可以大抵知道什么原因引起来段错误。

import faulthandler

faulthandler.enable()

内存泄露

嗯,这种情况下有很多的工具可以使用,其中有一些专门针对WSGI的程序比如Dozer,但是我最喜欢的当然是objgraph。使用简单方便,让人惊讶!

它没有集成WSGI或者其他,所以你需要自己去发现运行代码的方法,像下面这样:

import objgraph

objs = objgraph.by_type("Request")[:15]

objgraph.show_backrefs(objs, max_depth=20, highlight=lambda v: v in objs,


filename="/tmp/graph.png")

Graph written to /tmp/objgraph-zbdM4z.dot (107 nodes)

Image generated as /tmp/graph.png

你会得到像这样一张图(注意:它非常大)。你也可以得到一张点输出。

内存使用

有时你想少用些内存。更少的内存分配常常可以使程序执行的更快,更好,用户希望内存合适好用)

有许多可用的工具,但在我看来最好用的是pytracemalloc。与其他工具相比,它开销非常小(不需要依赖于严重影响速度的sys.settrace)而且输出非常详尽。但安装起来比较痛苦,你需要重新编译python,但有了apt,做起来也非常容易。

只需要运行这些命令然后去吃顿午餐或者干点别的:

apt-get source python2.7

cd python2.7-*

wget? https://github.com/wyplay/pytracemalloc/raw/master/python2.7_track_free_list.patch

patch -p1

debuild -us -uc

cd ..

sudo dpkg -i python2.7-minimal_2.7*.deb python2.7-dev_*.deb

接着安装pytracemalloc (注意如果你在一个virtualenv虚拟环境下操作,你需要在重新安装python后再次重建 – 只需要运行 virtualenv myenv)

pip install pytracemalloc

现在像下面这样在代码里包装你的应用程序

import tracemalloc, time
tracemalloc.enable()
top = tracemalloc.DisplayTop(
    5000, # log the top 5000 locations
    file=open('/tmp/memory-profile-%s' % time.time(), "w")
)
top.show_lineno = True
try:
    # code that needs to be traced
finally:
    top.display()

   

  输出会像这样:


2013-05-31 18:05:07: Top 5000 allocations per file and line

 #1: .../site-packages/billiard/_connection.py:198: size=1288 KiB, count=70 (+0),

average=18 KiB

 #2: .../site-packages/billiard/_connection.py:199: size=1288 KiB, count=70 (+0),

average=18 KiB

 #3: .../python2.7/importlib/__init__.py:37: size=459 KiB, count=5958 (+0),

average=78 B

 #4: .../site-packages/amqp/transport.py:232: size=217 KiB, count=6960 (+0),

average=32 B

 #5: .../site-packages/amqp/transport.py:231: size=206 KiB, count=8798 (+0),

average=24 B

 #6: .../site-packages/amqp/serialization.py:210: size=199 KiB, count=822 (+0),

average=248 B

 #7: .../lib/python2.7/socket.py:224: size=179 KiB, count=5947 (+0), average=30

B

 #8: .../celery/utils/term.py:89: size=172 KiB, count=1953 (+0), average=90 B

 #9: .../site-packages/kombu/connection.py:281: size=153 KiB, count=2400 (+0),

average=65 B

 #10: .../site-packages/amqp/serialization.py:462: size=147 KiB, count=4704

(+0), average=32 B

  …


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬 어레이에 어떤 데이터 유형을 저장할 수 있습니까?파이썬 어레이에 어떤 데이터 유형을 저장할 수 있습니까?Apr 27, 2025 am 12:11 AM

PythonlistsCanstoreAnyDatAtype, ArrayModuLearRaysStoreOneType 및 NUMPYARRAYSAREFORNUMERICALPUTATION.1) LISTSAREVERSATILEBUTLESSMEMORY-EFFICENT.2) ARRAYMODUERRAYRAYRAYSARRYSARESARESARESARESARESARESAREDOREDORY-UNFICEDONOUNEOUSDATA.3) NumpyArraysUraysOrcepperperperperperperperperperperperperperperperferperferperferferpercient

파이썬 어레이에 잘못된 데이터 유형의 값을 저장하려고하면 어떻게됩니까?파이썬 어레이에 잘못된 데이터 유형의 값을 저장하려고하면 어떻게됩니까?Apr 27, 2025 am 12:10 AM

whenyouattempttoreavalueofthewrongdatatypeinapythonaphonarray, thisiSdueTotheArrayModule의 stricttyPeenforcement, theAllElementStobeofthesAmetypecified bythetypecode.forperformancersassion, arraysaremoreficats the thraysaremoreficats thetheperfication the thraysaremorefications는

Python Standard Library의 일부는 무엇입니까? 목록 또는 배열은 무엇입니까?Python Standard Library의 일부는 무엇입니까? 목록 또는 배열은 무엇입니까?Apr 27, 2025 am 12:03 AM

Pythonlistsarepartoftsandardlardlibrary, whileraysarenot.listsarebuilt-in, 다재다능하고, 수집 할 수있는 반면, arraysarreprovidedByTearRaymoduledlesscommonlyusedDuetolimitedFunctionality.

스크립트가 잘못된 파이썬 버전으로 실행되는지 확인해야합니까?스크립트가 잘못된 파이썬 버전으로 실행되는지 확인해야합니까?Apr 27, 2025 am 12:01 AM

thescriptIsrunningwithHongpyThonversionDueCorRectDefaultTerpretersEttings.tofixThis : 1) checktheDefaultPyThonVersionUsingPyThon-VersionorPyThon3- version.2) usvirtual-ErondmentsBythePython.9-Mvenvmyenv, 활성화, 및 파괴

파이썬 어레이에서 수행 할 수있는 일반적인 작업은 무엇입니까?파이썬 어레이에서 수행 할 수있는 일반적인 작업은 무엇입니까?Apr 26, 2025 am 12:22 AM

PythonArraysSupportVariousOperations : 1) SlicingExtractsSubsets, 2) 추가/확장 어드먼트, 3) 삽입 값 삽입 ATSpecificPositions, 4) retingdeletesElements, 5) 분류/ReversingChangesOrder 및 6) ListsompectionScreateNewListSbasedOnsistin

어떤 유형의 응용 프로그램에서 Numpy Array가 일반적으로 사용됩니까?어떤 유형의 응용 프로그램에서 Numpy Array가 일반적으로 사용됩니까?Apr 26, 2025 am 12:13 AM

NumpyArraysareSentialplosplicationSefficationSefficientNumericalcomputationsanddatamanipulation. Theyarcrucialindatascience, MachineLearning, Physics, Engineering 및 Financeduetotheiribility에 대한 handlarge-scaledataefficivally. forexample, Infinancialanyaly

파이썬의 목록 위의 배열을 언제 사용 하시겠습니까?파이썬의 목록 위의 배열을 언제 사용 하시겠습니까?Apr 26, 2025 am 12:12 AM

UseanArray.ArrayOveralistInpyThonWhendealingwithhomogeneousData, Performance-CriticalCode, OrinterFacingwithCcode.1) HomogeneousData : ArraysSaveMemorywithtypepletement.2) Performance-CriticalCode : arraysofferbetterporcomanceFornumericalOperations.3) Interf

모든 목록 작업은 배열에 의해 지원됩니까? 왜 또는 왜 그렇지 않습니까?모든 목록 작업은 배열에 의해 지원됩니까? 왜 또는 왜 그렇지 않습니까?Apr 26, 2025 am 12:05 AM

아니요, NOTALLLISTOPERATIONARESUPPORTEDBYARRARES, andVICEVERSA.1) ArraySDONOTSUPPORTDYNAMICOPERATIONSLIKEPENDORINSERTWITHUTRESIGING, WHITHIMPACTSPERFORMANCE.2) ListSDONOTEECONSTANTTIMECOMPLEXITEFORDITITICCESSLIKEARRAYSDO.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기