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