재현할 수 없는 문제를 디버깅하는 방법

2681 단어 javadebuggingtutorial
때때로 로컬 환경에서 재현할 수 없는 버그가 발생합니다. 여전히 이 버그는 테스트 환경(개발 또는 스테이징)에 많이 존재합니다.
재현할 수 없다면 이 경우를 다루는 좋은 테스트를 작성할 수 없습니다.
그리고 이 시점부터 버그 수정은 "버그 수정 #"이라는 메시지가 있는 커밋을 하나씩 커밋하는 것입니다.
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

좋은 웹페이지 즐겨찾기