※ 본 포스팅은 생활코딩 이고잉님의 강의를 공부한 후 개인적인 학습목적으로 작성하였습니다. 생활코딩에서 더 자세하고 정확한 정보를 얻으시려는 분들은 아래 참고자료를 확인해주세요. ※
디버거
이전 수업에서는 프로그래밍이라는 것이 무엇인가에 대해 살펴봤습니다. 자동화의 열쇠가 바로 프로그래밍이라는 것을 잊지 마십시오. 이번 수업에서는 선물을 하나 드리겠습니다. 저는 초급자와 중급자의 차이에 관심이 많습니다. 강의를 하고 있으니까요. 중급자는 어떤 문제가 있을 때 그 문제의 원인을 잘 파악합니다. 그럼에도 불구하고 좋은 도구를 사용합니다. 그런데 초심자는 문제가 있을 때 문제의 원인을 파악하는 것을 잘 못합니다. 그럼에도 불구하고 도구를 사용하지 않습니다. 바로 이런 점에서 초심자가 겪게 되는 어려움은 중급자가 상상도 할 수 없을 만큼 크고, 어려움과 고독함 속에서 고통받습니다. 이 얘기를 조금만 뒤집어서 생각해보면 지금 여러분은 처음 프로그래밍을 배우는 단계이기 때문에 굉장한 어려움을 느끼고 있겠지만 여기서 조금만 더 나아가면 지금의 여러분으로서는 상상도 못할 만큼 코딩이 편안해집니다. 조금만 버티시면 됩니다. 그래서 이제 여러분들께 코딩이 편해질 수 있는 지름길 중 하나인 디버거라는 것을 선물로 드리려고 합니다.
버그(bug)라는 것은 우리가 작성한 코드의 어떤 의도하지 않은 문제를 의미합니다. 버그를 잡는 행위를 디버깅(debugging)이라고 하며, 디버깅을 할 때 사용하는 도구를 디버거(debugger)라고 부릅니다. 여러 현대적인 개발 도구들은 내부적으로 디버거를 모두 가지고 있습니다. 사용법도 거의 다 비슷하기 때문에 이클립스 기반으로 디버거 사용법을 배우면 다른 도구에서도 똑같이 디버거를 사용할 수 있습니다.

위의 그림은 우리가 이전 수업에서 작성한 코드입니다. 이 코드에 어떤 문제가 있거나 이 코드를 분석하고 싶을 때 디버거를 이용할 수 있습니다. 디버거를 이용하는 첫 번째 단계는 프로그램이 실행되는 것을 일단 멈추는 것입니다. 실행을 멈추고 싶은 위치에서 왼쪽 부분을 더블클릭하면 동그란 점이 생깁니다.

이 점을 브레이크포인트(breakpoint)라고 합니다. 동그란 점을 다시 더블클릭하면 없어지고 또 다시 더블클릭하면 생깁니다.

그런 다음, 프로그램을 실행해보겠습니다. 이때 실행 버튼 왼쪽의 벌레 모양의 버튼이 디버거를 통한 프로그램을 실행시키는 것입니다.

디버거 버튼을 누르면 오른쪽 위에 있는 아이콘이 벌레 보양으로 바뀝니다. 오른쪽 위에 있는 아이콘을 퍼스펙티브 아이콘(perspective icon)이라고 합니다. 퍼스벡티브(perspective)는 관점이란 뜻인데 자바로 프로그램을 개발할 때 유용하게 구성된 화면 배치를 가리킵니다. 퍼스펙티브 아이콘의 벌레는 디버깅할 때 보기 좋은 구성으로, 이 화면 구성을 바꿔 주는 일종의 테마 기능 같은 겁니다.

위의 그림에서 동그란 점 옆에 화살표는 현재 실행이 여기서 중지된 상태로 대기하고 있다는 의미입니다. 여기서 주목해야 하는 것은 왼쪽 위에 아이콘들입니다. 표시한 아이콘들 중에서 제일 오른쪽에 있는 스텝 오버(Step Over) 버튼은 명령어 하나만 실행하는 버튼입니다. 스텝 오버 버튼을 클릭하고 동그란 점의 화살표가 어떻게 되는지 보겠습니다.

스텝 오버 버튼을 클릭하면 동그란 점의 화살표가 한 칸 내려가고 동시에 우리가 실행 중인 프로그램의 “id” 변수가 “JAVA APT 507” 값으로 설정된 것을 보여줍니다. 즉, 디버거를 이용하면 코드를 한 줄씩 실행할 수 있습니다. 또한 코드가 실행되는 그 순간에 애플리케이션의 변수 상태를 체크할 수 있는 기능을 제공합니다.

프로그램을 더 실행해 보기 위해 스텝오버 버튼을 누르면 myElevator라는 변수가 생성될 것이므로 Variables라는 패널에 myElevator 변수가 설정될 것입니다. 보다시피 화살표가 한 칸 움직였고 Variables 패널에 myElevator 변수가 추가된 것을볼 수 있습니다. myELevator 옆의 화살표를 클릭하면 myElevator 변수 내부적으로 _id라는 값에 “JAVA APT 507”이라는 값이 들어가있다고 나옵니다. 그 밖에 클래스나 객체 같은 개념은 아직 모르기 때문에 넘어가면 됩니다.

그런데 만약 이 프로그램의 코드가 1억 줄이라면 코드를 하나하나 실행하는 것이 너무 귀찮습니다. 그래서 만약 시큐리티 부분은 생략하고 바로 조명을 켜는 부분까지 한 번에 실행해 현관등을 켜는 코드에서 멈추고 싶다면 해당 코드의 왼쪽을 더블클릭해서 동그라미 점을 만들면 됩니다. 그러고 나서 Resume 버튼을 누르면 코드가 한 줄씩 실행되는 것이 아니라 다음 브레이크포인트가 나올 때까지 한 번에 쭉 실행됩니다. Resume 버튼을 누르고 화살표가 어떻게 바뀌는지 봅시다. 보다시피 한 번에 쭉 실행되는 것을 확인할 수 있습니다. 그리고 그 과정에서 mySecurity라는 변수가 설정됐기 때문에 Variables 패널에 변수가 추가된 것을 볼 수 있습니다. 그 다음 코드가 hallLamp.on();인데요. hallLamp.on( ); 이 실행되면 콘솔에 뭔가가 출력되는데, 도대체 어떤 원인에 의해서 출력되는지 궁금할 수 있습니다. 그럴 때는 디버그 화살표를 우선 Step over(F6) 버튼을 눌러서 hallLamp.on( ); 코드로 옮깁니다. 그리고 hallLamp.on( ); 코드의 위치에서 스텝 오버 버튼을 클릭하면 다음 줄인 Lighting floorLamp = new Lighting(id + “ / florLamp”); 코드로 내려올 것입니다. 만약 이때 스텝 오버(F6) 버튼이 아니라 스텝 인투(Step Into F5) 버튼을 클릭하면 on( );이라는 메서드가 어떻게 작성돼 있는지 볼 수 있습니다.

위의 그림과 같이 on( ); 메서드의 코드가 이루어져 있고 hallLamp.on( );을 실행하면 이 코드가 실행되는 것이라는 것을 우리는 너무나 손 쉽게 알 수 있습니다.

그리고 동시에 왼쪽에 화면을 보면 현재 실행되고 있는 파일과 몇 번째 줄이 실행 중인지 명확하게 알려주고 있습니다. 여러분이 현재 on(); 메서드에서도 step over를 통해서 한 줄 한 줄 실행을 시켜줄 수 있고요. 여러분이 원래 작동하던 코드로 돌아가고 싶다면

왼쪽 위에 Step Return(F7) 버튼을 클릭해 주면 됩니다.

그리고 모든 작업이 끝나게 되면 빨간색 Terminate(Ctrl F2) 버튼을 누르면 디버거가 끝나게 됩니다.

그리고 나서 다시 자바를 작성하기 편한 화면으로 돌아가려면 오른쪽 위에 있는 J 버튼을 누르면 원래 화면으로 돌아가게 되는 것입니다. 여러분 이거 완전 대박 기능이죠. 이걸 모르고 코딩을 하는 것은 정말 어려운 일입니다. 여러분 디버거를 사용할 수 있게 된 것 정말 축하드립니다.
참고자료 및 원본 : 오픈튜토리얼스 생활코딩 (이고잉 님)
- 생활코딩 JAVA 입문 수업 : https://opentutorials.org/course/3930
'[생활코딩] Server > JAVA1(기초)' 카테고리의 다른 글
| 생활코딩 JAVA 1_직접 컴파일하고 실행하기 {실행 환경 살펴보기, 컴파일과 실행하기, 라이브러리 이용, 입력과 출력} (0) | 2023.04.29 |
|---|---|
| 생활코딩 JAVA 1_입력과 출력 (arguments & parameter) (0) | 2023.04.28 |
| 생활코딩 JAVA 1_IoT 프로그램 만들기 (0) | 2023.04.28 |
| 생활코딩 JAVA 1_프로그래밍이란 무엇인가? (0) | 2023.04.28 |
| 생활코딩 JAVA 1_변수의 {정의, 효용} (0) | 2023.04.28 |