프로그래밍(C#) /유니티공부

[유니티C# 스크립팅 마스터하기] - 2챕터. 디버깅

정체불명의 모모 2022. 5. 9. 18:29

오늘은 유니티 C# 스크립팅 마스터하기 책에 

2챕터 내용을 다뤄 보도록 하겠습니다.

2챕터의 내용은 디버깅입니다.

디버깅은 코드의 완성도를 높여주는 중요한 과정 입니다! 

버그를 열심히 없애기 위해 오늘도 출발해 봅시다!


Debug.Log를 이용한 디버깅 : 개발자 지정 메세지

: 유니티에서 가장 고전적이고 잘 알려진 디버깅 기법은 콘솔에 프로그램 흐름과 오브젝트 속성을 보여주기 위해 진단 메세지를

  출력하는 Debug.Log 함수를 이용하는 방법일 것 입니다.

  벡터와 컬러 오브젝트를 포함한 모든 유니티 오브젝트에는 ToString 함수가 있어 내부 멤버(X,Y,Z)를 사람이 읽을 수 있는 형태의

  문자열로 출력할 수 있습니다.

디버깅 기법으로서 Debug.Log의 한계는 바로 코드 간결성과 프로그램 복잡성에 있습니다.

Debug.Log 함수를 사용하려면 코드를 추가해 주고 마치면 제거 해야 합니다. 

그러지 않고 그대로 두면 자원을 낭비하기도 하고 혼란을 초래하기도 하는데, 여러 군데에 놔두면 더욱 그렇습니다.

이벤트가 일어나는 경우 오브젝트의 변수가 어떻게 변하거나 업데이트 되는지 살펴보려 할 때 가장 적합 합니다.


◻︎ Debug.Log의 단점을 극복하는 방법
특정 플래그를 활성화하여 디버그 전용 코드를 실행할 수 있도록 디버그와 릴리즈(배포) 코드 단락을 분리 하는 방법 입니다.
전역 선언을 하여 구분하고 조건별로 컴파일 하거나 특정 단락을 제외하는 것을 활성화 할 수 있도록 해주는 특별한 전처리기 플래그 입니다.

 

- 전연 선언을 하려면 애플리케이션 메뉴의 Edit > Project Settings > Player - Scripting Define Symbols 에 추가해 주면 됩니다.


시각적 디버깅

: 말 그대로 선으로 그리거나 와이어프레임 형태의 육면체로 그리게 된다.

  비슷한 경우로, 궤적을 따르는 오브젝트가 있다면 이 궤적을 오브젝트를 표시하는 뷰포트에 컬러 선으로 그리면 좋을 것이다.

  유니티는 이미 충돌체의 와이어프레임 바운딩 박스나 카메라의 프러스텀 같은 많은 기모즈를 자동으로 제공하고 있다.


◻︎ MonoBehaviou의 OnDrawGizmos 이벤트 활용


오류 기록

: 게임 플레이 중 요류와 예외가 일어났는지, 그리고 언제 일어났는지를 기록할 방법이 필요하게 됩니다.

  한가지 방법은 로그 파일을 이용하는 것 입니다.

 

  로그 파일은 게임의 실행시점에 컴퓨터에 사람이 읽을 수 있는 형태로 생성하는 텍스트 파일로서 발생하는 모든 오류에 대한

  자세한 내용을 기록 합니다.

  너무 자세한 내용을 기록하는 경우 파일을 혼잡하게 만들고, 적게 기록하는 경우엔 쓸모없는 파일을 만들 수 있으므로

  혼잡하게 만들고, 너무 적게 기록하는 경우엔 쓸모없는 파일ㅇ을 만들 수 있으므로 기록하는 정보의 양을 신중하게 정해야 합니다.

 

•  장점 

  : 테스터가 로그 파일을 보내 개발자의 오류 추적을 도와 개발자가 새로운 버그를 만들어 내지 않고 코드상의 오류를 빠르게 콕 집어내서

    효과적으로 고칠수 있게 한다는 점 입니다.

 

◻︎ Application 클래스를 이용함 으로써 델리게이트를 통해 예외 통지 받는 방법

(StreamWrite 클래스는 마소 닷넷 오픈 소스로 구현한 프레임워크의 일부분)

 


프로파일러

: 디버깅과 최적화에 각각 사용되는 부가 도구로 프로파일러(profiler)창이 있는데, 유니티 프로 버전일 경우에만 

  Window > Analysis > Profiler 를 클릭 하여 이용할 수 있습니다.

프로파일 창

프로 파일러는 CPU와 그래픽카드 등의 시스템 하드웨어 컴포넌트에 걸쳐 어떻게 시간과 작업 부하가 분포되는지 탑다운 식의 통계

화면을 보여줍니다.

프로파일러를 이용하면 물리 연산이나 오디오 기능 등 다른 카테고리와 비교해 씬에서의 카메라 렌더링에 얼마나 많은 시간이 소요되었는지

알 수 있습니다.

 

- Total 과 Time ms : Total 칼럼은 함수에 의해 소비된 프레임 시간의 비율을 표시 합니다.

   Time ms 칼럼은 해당 프레임의 절대 소요 시간으로서 밀세컨드 단위로 표기 됩니다.

    이 두 값들은 각각의 프레임에서 함수를 호출하는 비용이 얼마나 비싼지와 총 소요 비용이 얼마나 되는지

    상대적 / 절대적인 측정치를 표시합니다.

 

- Self 와 Self ms : Total 과 Total ms 칼럼은 선택된 프레임의 함수 수행 비용을 측정하지만 함수 안에서 불려진  다른 함수에서

  소요된 총시간을 포함 합니다.

  Self ms는 다른 함수가 완료될 때까지 기다리느라 추가되는 시간을 제외하고, 함수 내에서 소용되는 총시간만을 나타냅니다.

   이 값들은 성능 문제를 일으키는 특정한 함수를 콕 집어내기 위해 통상적으로 가장 중요한 것 들 입니다.


이것으로 2챕터 설명을 끝내도록 하겠습니다!

프로파일러 같은 경우는 Pesonal에서는 확인할 수 없어서 아쉽네요 ㅡㅜ..

그리고 Log.txt 테스트도 추가로 더 해봐야 할 것 같습니다.

mac이라 그런가 로그가 써지질 않네요 ㅜㅠ 

윈도우에서 확인해서 추가해 보도록 하겠습니다.

그럼 다음 장은 3 챕터. 싱글턴과 정적 멤버, 게임 오브젝트와 월드에서 뵙겠습니다.