재현할 수 없는 문제를 디버깅하는 방법
재현할 수 없다면 이 경우를 다루는 좋은 테스트를 작성할 수 없습니다.
그리고 이 시점부터 버그 수정은 "버그 수정 #"이라는 메시지가 있는 커밋을 하나씩 커밋하는 것입니다.
CI/CD 파이프라인을 기다려야 할 때마다, 그리고 몇 번의 시도 후에 귀하의 근무 시간은 거의 끝났습니다 :(
이 상황에 처한 사람은 모두 그것이 얼마나 실망스러운 일인지 알고 있습니다.
docker-container-specific JVM에서만 나타나는 버그가 있음을 깨닫기 위해 환경을 비교하는 데 2-3시간을 소비한 방법을 기억합니다.
하지만 로컬 컴퓨터가 아닌 원격으로 코드를 디버깅할 수 있다면 어떨까요?
실제로 할 수 있는 것 같습니다!
Java로 수행하는 방법을 살펴보겠습니다.
그렇게 어렵지 않습니다.
Java 앱을 실행하는 스크립트에서 특수 매개변수를 전달해야 합니다.
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
이제 시작 명령은 다음과 같이 표시됩니다.
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 app.jar
원하는 포트로 변경
:5005
할 수 있습니다. 디버그 소켓이 노출될 포트입니다.WARNING! This parameter must not be used in production. Remote debug allows remote code execution.
이제 IDE를 사용하여 원격 실행 애플리케이션에 디버거를 연결할 수 있습니다. 마지막 단계인 디버그 구성을 추가하기만 하면 됩니다.
Run/Debug Configurations
메뉴에서 할 수 있습니다. Remote JVM Debug
를 선택하고 애플리케이션이 실행 중인 호스트 및 디버그 소켓 포트를 설정합니다.그게 다야. 이제 로컬에서 실행 중인 스테이징 환경에서 코드를 디버그할 수 있습니다.
결론
이 기능을 사용하면 많은 시간을 절약할 수 있으므로 선택한 언어에 대해 이 주제를 조사하는 것이 좋습니다. 이를 사용하여 다른 머신에서 실행 중인 앱뿐만 아니라 Docker에서 로컬로 실행 중인 앱도 디버그할 수 있습니다.
다음은 내가 찾은 몇 가지 리소스입니다.
Java 원격 디버깅에 대한 추가 정보:
JetBrains tutorial
DZone article
파이썬: JetBrains tutorial
C#: MS Docs
자바스크립트: JetBrains tutorial
Reference
이 문제에 관하여(재현할 수 없는 문제를 디버깅하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/michaelfmnk/how-to-debug-a-problem-you-can-not-reproduce-293e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)