TIL

[TIL] 내일배움캠프_Unity 디버깅

Hwone 2023. 10. 20. 02:25

디버깅
: 프로그램이 예상대로 동작하지 않을 때 디버깅을 통해 문제를 찾아내고 이를 수정하여 정상 동작을 복원하는데 사용된다 

또한 디버깅 과정에서 성능 문제나 비효율적인 코드를 식별하고 개선할 수 있으며 성능 향상에 도움을 준다 

 

버그와 에러 유형 

- 런타임 오류 : 프로그램이 실행 중에 발생하는 오류, 주로 무효한 연산, 배열 인덱스 오버플로우, 형식 변환 오류 등이 있다

- 논리 오류 : 문법적으로 올바르게 동작하지만 의도와 다른 결과를 출력할 때 발생하는 오류, 디버깅을 통해 식별하고 수정해야한다

- 컴파일 에러 : 코드가 컴파일 단계에서 에러를 발생시키는 경우, 주로 문법 오류나 변수 선언 문제 들을 포함 

- 예외 : 실행 중에 예기치 않은 상황이 일어났을 때 발생하고 예외처리를 통해 처리할 수 있다 

 

중단점 활용 

- 브레이크 포인트는 코드 실행을 중단시키는 지점으로, 프록램이 해당 지점에서 실행을 멈추고 디버깅 도구를 사용하여 해당 위치의 코드를 검사할 수 있다 

- 조건부 브레이크포인트는 특정 조건이 충족될 때만 중단되도록 설정할 수 있는 중단점이다 

(설정방법: 중단점을 설정한 후 마우스 오른쪽 버튼을 클릭하고 "조건"을 선택, 조건식을 입력하여 해당 조건이 충족될 때만 중단점이 동작하도록 설정 

 

- 데이터 조사 : 중단점에서 프로그램을 일시 중지한 후, 디버깅 도구를 사용하여 변수의 값을 검사하여 변수의 현재 상태를 확인하고 버그 또는 문제를 식별할 수 있다 

- 변수 감시 : 디버깅 도구에서는 "로컬" 또는 "워치" 창을 사용하여 현재 스코프 내의 변수를 감시할 수 있다 

워치 창을 사용하면 특정 변수를 지속적으로 모니터링하여 값의 변경을 쉽게 파악할 수 있다 

 

스텝 인/아웃 

- 코드 실행의 단계적 제어 : 스텝 인, 스텝 아웃, 스텝 오버는 코드 실행 중에 다음 단계로 어떻게 진행할지를 제어하는 디버깅 도구의 기능이다 

 

- 스텝 인 (Step In)

: 현재 실행 중인 함수 또는 메소드 내부로 진입하여 함수 내부의 코드를 디버깅할 수 있다 

스텝인을 통해 함수 호출 내부로 들어가고, 해당 함수 내의 코드를 한 줄 씩 실행하며 디버깅 한다 

 

- 스텝 아웃 ( Step Out) 

: 현재 실행 중인 함수 또는 메소드의 범위를 벗어나 외부로 나갔다가 함수 호출을 완료한 후에 다음 라인으로 이동할 수 있다 또한 함수가 반환된 후의 코드를 디버깅할 수 있다

 

- 스텝 오버 ( Step Over) 

: 현재 라인의 코드를 실행하고 다음 라인으로 이동한다, 만약 현재 라인에서 함수 호출이 있는 경우 , 해당 함수 호출은 완료된다 또한 현재 함수 내부의 디버깅을 넘어가고 다음 라인으로 이동하며 코드의 실행 흐름을 따른다 

 

- 호출 스택 확인 

스텝 인/아웃을 사용하는 동안 호출 스택을 확인할 수 있다 호출 스택은 현재 실행중인 함수 호출의 히스토리를 보여주며, 함수가 어떻게 호출괴도 있는지를 파악하는 데 도움을 준다, 재귀 호출이나 다중 함수 호출을 디버깅할 때 특히 유용하다 

 

자주 발생하는 오류 

- NullReferenceException : 게임 오브젝트에서 스크립트에 연결된 변수가 null 인 상태에서 변수 또는 해당 변수에 연결된 메서드에 액세스하는 상황 

 

- IndexOutOfRangeException : 배열 또는 리스트에서 유효하지 않은 인덱스에 액세스하는 상황 

 

- MissingComponentException : 게임 오브젝트에서 필요한 컴포넌트가 누락된 상태에서 해당 컴포넌트에 액세스하려고 할 때 발생 

 

- Syntax Error : 문법 오류는 스크립트 파일에서 유효하지 않은 코드가 포함되어 있을 때 발생 

* 디버깅 방법 : 스크립트 파일을 열어 오류 메시지를 확인하고, 해당 줄 및 주변 코드를 검토하여 문법 오류를 수정

 

- Physics 관련 : 충돌, 물리 시뮬레이션 또는Rigidbody 관련 문제로 발생하는 오류 

* 디버깅 방법: Collider 및 Rigidbody 설정을 검토하고, 충돌 감지 코드를 확인하여 오류를 수정

 

** 디버깅용 단축키 

1. F5 : 디버깅 시작 ( 디버그 모드로 프로젝트 실행) 

2. F9 : 중단점 설정 및 해제 

3. F10 : 다음 라인으로 이동 (스텝 오버) 

4. F11 :  함수 내부로 들어가기 (스텝 인) 

5. Shift + F11:  함수 호출 완료 및 다음 라인으로 이동 (스텝 아웃) 

6. F12 : 현재 메소드 또는 함수의 정의로 이동