시스템을 개발하면서 경험한감정의 롤러코스터는 이에 대해 최소한의 노출이라도 경험한 사람이라면 누구나 강력하게 말할 수 있는 것입니다. 그러나 다양한 프로젝트와 애플리케이션에 걸쳐 상당한 경험을 가진 사람들에게는 처음부터 시스템을 구축하는 것이 종종 꿈의 상황으로 간주됩니다.
실제 악몽은 기존 및 실행 중인 시스템을 유지, 지원 또는 발전시켜야 할 때 발생합니다. 때로는 수천 또는 수백만 명의 사용자가 사용하는 경우도 있습니다. 그리고 소프트웨어 개발에서 The Inferno of Dante의가장 깊은 계층은문제를 해결하기 위해 코드를 디버깅해야 할 때입니다.
때때로, 특히 막 시작하는 경우에는 가장 간단하고 비공식적인 print() 및 다른 언어의 해당 기능에 의존한다는 것을 알고 있습니다.걱정 마세요. 우리의 비밀은 여기 안전해요. 그러나 가장 고통스럽고 까다로운 버그의 경우 효율적이고 강력하며 포괄적인디버깅 도구를 사용해야 한다는 것도 알고 있습니다.
저는 업무 중 일부성능 문제를 분석해야 했습니다. 함수/클래스 반환에 대한 얕은 조사 또는 Grafana를 사용한 시간 추적만으로는 얽힌 모든 코드에서 실제 문제를 찾기에 충분하지 않았습니다. 그럼... 디버그해 볼까요!
Python에는 코드 디버깅을 위한 간단한 라이브러리인PDB가 있습니다. 이를 사용하려면 pip를 사용하여 설치하기만 하면 됩니다. 예를 들면:
그런 다음 디버깅하려는 코드에한 줄을 추가하세요.
이것이 여러분의중단점이 될 것입니다. 이제 애플리케이션을 다시 실행할 수 있으며 방금 추가한 줄 바로 다음에 실행이 일시 중지됩니다. 그런 다음코드를 한 줄씩, 함수별로 단계별로 실행하여 해결해야 할 문제를 찾을 수 있습니다.
도커 사용 위의 설정은Django, Flask 또는 FastAPI를 사용하는 간단한 Python 프로젝트에 충분합니다. 그러나 이 지점에 도달하여Docker 컨테이너내에서 애플리케이션을 실행하고 문제에 직면했다면 나도 같은 길을 가고 있는 것입니다. 침착하게 다음 몇 단계를 따르십시오.
1 - 일반적인 PDB 대신원격 디버거를 설치해야 합니다. Docker 컨테이너 내에서 실행하세요(또는 종속성 관리자에 라이브러리를 포함하세요):
으아악
새 포트를 추가하여 PDB 진입점을 노출합니다.
으아악
다음 두 줄을 추가하여 Docker 외부에서 실행 중인 컨테이너로 명령을 보낼 수 있도록 합니다.
으아악
중단점 줄을다음과 같이 변경하세요.
으아악
포트 4444에서 PDB 디버거와 연결할 수 있습니다.
으아악
유용한 명령을 사용해야 합니다. 여기에서 그 중 일부를 살펴보세요:
저는 보통step(s)및next(n)명령을 사용합니다. 둘 사이의 차이점은 단계가 각 행을 실행한다는 것입니다. 심지어 현재 행에서 호출되는 함수 내부의 행도 실행됩니다. 그런 다음 현재 함수 내부의 줄만 실행하고 호출된 함수의 반환을 기다립니다.
다른 두 가지 유용한 명령은 반환될 때까지 모든 함수를 실행하는return(r)과 다음 중단점까지 모든 함수를 실행하는continue(c)입니다.
결론 이 콘텐츠가 도움이 되었기를 바랍니다. 이 글을 쓰는 동안 중요한 성능 문제를 조사하고 학습을 강화함으로써 저는 다음을 보장할 수 있습니다"적절한 작업에 적합한 도구 사용"소프트웨어 개발자로서 절대 잊지 말아야 할 것입니다. 이는 우리의 경력을
더 효과적인 수준으로 끌어올릴 수 있고 이 롤러코스터 타기에더 많은 기쁨을 가져다 줄 수 있습니다.
위 내용은 Docker 컨테이너 내에서 Python 및 Django 애플리케이션을 디버깅하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!