일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- pintos
- 네트워크
- 크래프톤 정글
- 파이썬
- 티스토리챌린지
- 유니티
- anonymous page
- 다익스트라
- Unity
- 알고리즘수업-너비우선탐색2
- BFS
- 핀토스
- User Stack
- TiL
- C
- 크래프톤정글4기
- 알고리즘
- 연결리스트
- 이벤트 함수 실행 순서
- 크래프톤 정글 4기
- 크래프톤정글
- kraftonjungle
- c#
- KRAFTON JUNGLE
- 4기
- project3
- 전쟁-전투
- 오블완
- 추상클래스와인터페이스
- 백준
- Today
- Total
말감로그
[유니티 C# 스크립팅 마스터하기] - 2장 디버깅 본문
컴퓨터 과학자인 에츠허르 데이크스트라는
"프로그램 테스트를 통해 버그의 존재를 증명할 수는 있지만, 버그가 없음을 증명할 수는 없다" 라고 말했다.
디버깅은 스크립트를 작성할 때 중요한 부분이고, 디버깅 없이 오류를 추적하고 고치는 방법은 없다.
Debug.Log를 이용한 디버깅 : 개발자 지정 메시지
유니티에서 가장 고전적이고 잘 알려진 디버깅 기법은 콘솔에 프로그램 흐름과 오브젝트 속성을 보여주기 위해 진단 메시지를 출력하는 Debug.Log 함수를 이용하는 방법일 것이다.
벡터와 컬러 오브젝트를 포함한 모든 유니티 오브젝트에는 ToString 함수가 있어 내부 멤버(X,Y,Z와 같은)를 사람이 읽을 수 있는 형태의 문자열로 출력할 수 있다.
디버깅 기법으로서 Debug.Log의 한계는 바로 코드 간결성과 프로그램 복잡성에 있다.
Debug.Log 함수를 사용하려면 소스 파일에 명시적으로 코드를 추가해야 하고, 디버깅을 마치고 나서 Debug.Log 절을 수동으로 제거해야 한다. 그러지 않고 그대로 두면 자원을 낭비하기도 하고 혼란을 초래하기도 한다.
Debug.Log의 단점을 극복하는 방법
특정 플래그를 활성화하여 디버그 전용 코드를 실행할 수 있도록 디버그와 릴리즈 코드 단락을 분리하는 방법이다.
전역 선언을 하여 구분하고 조건별로 컴파일하거나 특정 단락을 제외하는 것을 활성화할 수 있도록 해주는 특별한 전처리기 플래그이다.
- 전역 선언을 하려면 애플리케이션 메뉴의 Edit > Project Settings > Player - Scripting Define Symbols에 추가해주면 된다.
시각적 디버깅
말 그대로 선으로 그리거나 와이어프레임 형태의 육면체로 그리게 된다.
비슷한 경우로, 궤적을 따르는 오브젝트가 있다면 이 궤적을 오브젝트를 표시하는 뷰포트에 컬러 선으로 그리면 좋을 것이다.
유니티는 이미 충돌체의 와이어프레임 바운딩 박스나 카메라의 프러스텀 같은 많은 기즈모를 자동으로 제공하고 있다.
오류 기록
게임 플레이 중 오류와 예외가 일어났는지, 그리고 언제 일어났는지를 기록할 방법이 필요하게 된다.
한 가지 방법은 로그(기록) 파일을 이용하는 것이다.
로그 파일은 게임의 실행 시점에 컴퓨터에 사람이 읽을 수 있는 형태로 생성하는 텍스트 파일로서 발생하는 모든 오류에 대한 자세한 내용을 기록한다.
장점
테스터가 로그 파일을 보내 개발자의 오류 추적을 도와 개발자가 새로운 버그를 만들어내지 않고 오류를 빠르게 콕 집어내서 효과적으로 고칠 수 있게 한다는 점이다.
Application 클래스를 이용함으로써 델리게이트를 통해 예외 통지 받는 방법
(StreamWriter 클래스는 마소 닷넷 오픈 소스로 구현한 프레임워크의 일부분)
프로파일러
프로파일러는 CPU와 그래픽 카드 등의 시스템 하드웨어 컴포넌트에 걸쳐 어떻게 시간과 작업 부하가 분포되는지 탑다운 식의 통계 화면을 보여준다.
프로파일러를 이용하면 물리 연산이나 오디오 기능 등 다른 카테고리와 비교해 씬에서의 카메라 렌더링에 얼마나 많은 시간이 소요되었는지 알아낼 수 있다.
Window > Analysis > Profiler 클릭하여 이용할 수 있다.
Deep Profie 옵션이 있는데, 이 옵션은 이론적으론 게임에 대한 좀 더 자세한 정보를 제공하지만 이 모드를 가급적 선택하지 않는 것을 권장한다. 이 옵션을 키면 무거운 에셋이나 무거운 코드를 구동하는 게임을 실행할 때 유니티 에디터에 성능 문제를 일으킬 수 있어 에디터까지 함께 먹통이 될 수도 있다.
그래프의 가로축은 프레임을 나타내는데, 메모리 버퍼에 가장 최근 추가한 프레임들이 나타난다.
세로 축은 시간 혹은 연산 비용을 나타낸다. 높은 값은 더 많은 부하와 낮은 프레임 시간을 표현한다.
프로파일러를 통해 성능 문제를 진단할 때는 급격한 증가(정점이나 꼭짓점) 지점을 찾는 것이 좋다.
- Total과 Time ms : Total 칼럼은 함수에 의해 소비된 프레임 시간의 비율을 표시한다.
Time ms 칼럼은 해당 프레임의 절대 소요 시간으로서 밀리세컨드 단위로 표기된다.
이 두값들은 각각의 프레임에서 함수를 호출하는 비용이 얼마나 비싼지와 총 소요 비용이 얼마나 되는지 상대적 / 절대적
인 측정치를 표시한다.
- Self와 Self ms : Total과 Total ms 칼럼은 선택된 프레임의 함수 수행 비용을 측정하지만 함수 안에서 불려진 다른 함수에서 소요된 총 시간을 포함한다.
Self 와 Self ms는 다른 함수가 완료될 때까지 기다리느라 추가되는 시간을 제하고, 함수 내에서 소요되는 총 시간만을 나타낸다.
이 값들은 성능 문제를 일으키는 특정한 함수를 콕 집어내기 위해 통상적으로 가장 중요한 것들이다.
모노디벨롭을 이용한 디버깅
모노디벨롭은 코드를 수정할 필요 없이 유니티 프로세스에 붙이면 중단점이나 추적과 같이 다른 종류의 소프트웨어를 개발할 때 만날 수 있는 다양한 공통 디버깅 도구를 사용할 수 있다.
'Unity' 카테고리의 다른 글
[유니티C# 스크립팅 마스터하기] - 4장 이벤트 주도적 프로그래밍 (1) | 2025.01.07 |
---|---|
[유니티 C# 스크립팅 마스터하기] - 3장 싱글턴과 정적 멤버, 게임 오브젝트와 월드 (0) | 2025.01.06 |
[유니티 C# 스크립팅 마스터하기] - 1장 유니티 C# 복습 (0) | 2025.01.02 |
[Unity] 시네머신으로 카메라 이동 제한하기 (1) | 2024.12.25 |
[Unity] Device Simulator (디바이스 시뮬레이터) (0) | 2024.12.23 |