CodeGym 커뮤니티의 여러분 안녕하세요! 오늘은 디버깅에 대해 이야기해 보겠습니다. 디버깅이란 무엇이며 IntelliJ IDEA에서 디버깅하는 방법입니다. 이 문서는 이미 Java Core에 대한 최소한의 지식이 있는 사람들을 대상으로 합니다. 라이브러리를 게시하기 위한 프레임워크나 복잡한 절차가 없습니다. 여유로운 산책. 그러니 편안하게 쉬고 시작합시다!
문서 README 파일 에 따르면 , 꿀을 수집하는 모든 꽃의 예상 동작은 수집된 꿀의 양( double 형태를 취함 )이 수집한 꿀. 프로젝트에는 다음과 같은 클래스가 있습니다.
문서 README 파일에 따르면 과즙은 2:1의 비율로 꿀로 변환됩니다.
비즈니스 분석가와 이야기한 후 설명서 README 파일에 오류가 있어 업데이트해야 한다는 결론을 내렸습니다 . README 파일을 업데이트해 보겠습니다.
Stack Overflow CodeGym에서 기사를 읽을 수 있습니다 :)
디버그 모드가 필요한 이유
버그가 없는 코드는 없습니다... 이것이 인생이 작동하는 방식입니다. 따라서 코드가 예상대로 작동하지 않는다고 해서 산산조각이 나거나 포기해서는 안 됩니다. 하지만 우리는 어떻게 해야 합니까? 글쎄, 우리는 모든 곳에 명령문을 넣은System.out.println
다음 오류를 찾기 위해 콘솔 출력을 샅샅이 뒤질 수 있습니다. 즉, 신중한 로깅을 사용하여 디버깅할 수 있습니다. 그러나 로컬 컴퓨터에서 코드를 실행할 수 있다면 디버그 모드를 사용하는 것이 좋습니다 . 이 기사에서는 IntelliJ IDEA를 사용하여 프로젝트를 디버깅하는 것을 고려할 것입니다.
디버그 모드란 무엇입니까?
디버그 모드는 실행 중인 코드를 디버깅(확인)하기 위한 모드입니다. 지정된 장소에서 실행을 중지하고 진행 상황을 확인할 수 있습니다. 코드의 특정 위치에서 프로그램의 상태를 이해할 수 있습니다. 시계를 멈추고 옆에서 모든 것을 볼 수 있는 것과 같습니다. 멋지죠? 우리의 목표는 사랑하는 IntelliJ IDEA 개발 환경을 사용하여 애플리케이션을 디버깅하는 방법을 빠르고 쉽게 배우는 것입니다.디버깅을 시작하기 위해 필요한 것
다음은 몇 가지 무료 조언입니다. 이 기사를 읽는 동안 여기에 설명된 모든 작업을 수행하십시오. 따라야 할 모든 작업이 있습니다. 필요한 것:- IntelliJ IDEA 버전 2019.3.1 이상. 누군가 이것을 가지고 있지 않은 경우 다운로드할 수 있는 링크가 있습니다 . Community Edition을 다운로드하십시오. 제가 사용할 버전입니다.
- 이 GitHub 프로젝트를 복제 하고 IDEA를 통해 가져옵니다.
약간의 이론... 약속합니다 :D
디버깅을 조금이라도 시작하려면 중단점이 무엇 인지 이해하고 몇 가지 단축키에 익숙해져야 합니다. 중단점은 응용 프로그램 상태에 따라 응용 프로그램 실행을 중지하려는 위치를 나타내는 특수 마커입니다. 왼쪽 패널을 마우스 왼쪽 버튼으로 클릭하거나 코드 위치를 클릭하고 Ctrl+F8을 눌러 중단점을 설정할 수 있습니다 . 줄 중단점, 필드 감시점 및 메서드 중단점의 세 가지 유형의 중단점을 살펴보겠습니다. 다음과 같이 표시됩니다.-
라인에서:
명령문에 람다 표현식이 있는 경우 IDEA는 중단점을 전체 명령문에 둘지 또는 특별히 람다 표현식에 둘지 선택하라는 메시지를 표시합니다.
-
방법:
-
수업에서:
- Bee.java:24 — 24행의 Bee 클래스
- Main.java:14 — 14행의 Main 클래스에서
디버깅이라는 일을 하러 갑시다!
저는 양봉가 집안 출신이기 때문에 디버깅을 설명하기 위해 만든 프로젝트는 꿀벌이 꿀을 모으고, 꿀을 처리하여 벌집에서 꿀을 얻는 과정을 모델로 설명합니다. 프로젝트의 루트 디렉토리에서 찾을 수 있는- 벌 — 평범한 일벌
- BeeQueen — 여왕벌
- BeeHive — 벌집
- HoneyPlant — 과즙을 수집하는 꿀 식물(과즙 공급원)
public static void main()
Main — 실행이 시작되는 메서드인 를 찾는 곳입니다 .
main()
프로그램이 꿀의 양을 계산하지 않을 뿐만 아니라 예외도 발생한다는 사실을 알게 됩니다. 문제가 무엇인지 조사하고 확인해야 합니다. 오른쪽 아래 모서리에 있는 추적 스택에서 다음 위치에 RuntimeException이 발생했음을 알 수 있습니다 HoneyPlant.java:20
. 바로 위에서 이야기한 내용입니다. main()
디버그 모드에서 메서드를 실행하여 이 RuntimeException을 살펴보겠습니다 . 이렇게 하려면 main()
메서드 옆에 있는 IntelliJ IDEA의 녹색 삼각형 화살표를 클릭합니다. 결과적으로 예외가 발생하기 직전에 프로그램이 중지되고 다음 아이콘이 표시됩니다. 사용 가능한 모든 정보를 얻으려면 디버그 섹션을 살펴봐야 합니다. 변수 가 있습니다응용 프로그램의 이 부분에서 사용할 수 있는 모든 변수를 표시하는 창:
- 넥타 = 1.0;
- 과즙 용량 = -1.0.
if (nectar == 0) {
return 0;
}
하지만 문제는 우리가 잘못된 변수를 확인하고 있다는 것입니다. 이것은 코드의 오류입니다. 꽃에서 사용할 수 있는 꿀의 양( nectarCapacity 변수에 저장됨)을 확인하는 대신 프로그램은 메서드의 꿀 매개 변수 값(꽃에서 가져오고자 하는 꿀의 양)을 확인합니다. 여기있어! 첫 번째 버그! 이를 수정한 후 다음 코드를 얻습니다.
if (nectarCapacity == 0) {
return 0;
}
이제 main()
일반적인 방법으로 메서드를 실행합니다 (Run 'Main.main()')
. 예외가 발생하지 않고 프로그램이 작동합니다. 애플리케이션이 완료될 때까지 실행되고 다음과 같은 답변이 제공됩니다.
"33.0 honey was produced by 7 bees from 2 honey plants"
지금은 모든 것이 괜찮겠지만 이 대답은 틀렸습니다... ## Documentation
Presentation based on honey production.
**Note**: 2 units of nectar = 1 unit of honey
주요 방법에는 각각 30단위와 40단위의 과즙이 있는 두 개의 벌꿀 식물이 있습니다. 그래서 우리는 궁극적으로 꿀 35단위로 끝나야 합니다. 그러나 프로그램은 우리에게 33을 얻었다고 말하고 있습니다. 다른 두 단위는 어디로 갔습니까? 알아 보자! 이렇게 하려면 가 호출 Main.main()
되는 28행의 메서드 에 중단점을 설정하고 디버그 모드에서 메서드를 beeHive.populateHoney()
실행합니다 .main()
이 점을 더 자세히 고려할 것입니다. 프로그램은 28행을 실행하기 전에 실행을 중지했습니다. 하단에는 실행 중인 애플리케이션에 대해 사용 가능한 모든 정보를 표시하는 디버그 섹션이 표시됩니다. 이미 언급한 대로 변수 창에는 응용 프로그램의 이 부분에서 사용할 수 있는 모든 변수와 개체가 포함되어 있습니다. 프레임 창에는 애플리케이션이 진행 중인 단계가 표시됩니다. 이전(프레임) 단계를 보고 모든 로컬 데이터를 볼 수 있습니다. 프로그램을 계속 실행하려면 아래와 같이 F9 또는 녹색 아이콘을 누르십시오. 프로그램을 중지하려면 빨간색 사각형을 클릭하십시오. 응용 프로그램을 디버그 모드에서 다시 시작 하려면 화살표를 클릭하십시오. 두 개의 키를 사용하여 단계별로 애플리케이션:
- F8 — 메서드를 실행하지 않고 코드를 실행합니다.
- F7 — 코드를 단계별로 실행하고 메서드를 단계별로 실행합니다.
beeHive.populateHoney()
. 이제 F8을 사용 하여 이 메서드를 단계별로 실행하고 그 안에서 일어나는 일을 설명합니다.
- 25행 — Stream API는 모든 꿀벌로부터 꿀을 수집하는 데 사용됩니다.
- 26행 — 새로 생성된 꿀이 기존 꿀에 추가됩니다.
- 27행 — 꿀 2단위가 여왕에게 할당됩니다.
- 28행 — 이 두 단위는 총 꿀 양에서 제거됩니다.
- 29행 — 여왕이 이 꿀을 먹습니다.
## Documentation
Presentation based on honey production.
**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
끝났습니다. 발견한 모든 버그를 수정했습니다. 우리는 잘난 체하는 표정으로 침착하게 계속할 수 있고, 커피를 홀짝이며, 요약하자
이 기사에서 우리는 다음을 배웠습니다.- 모든 사람의 작업에는 오류가 있으며 디버깅은 오류를 수정하는 좋은 방법입니다.
- 중단점이란 무엇이며 중단점의 유형은 무엇입니까?
- 예외 중단점을 설정하는 방법
- 디버그 모드에서 코드를 단계별로 실행하는 방법