VioletaBabel
170904 디버깅 본문
ToString 메소드 오버라이드
//클래스 안에서
public override string ToString ()
{
return string.Format("Class AAA Name : {0} | Id : {1} | Number : {2}", name, id, num);
}
Void Start()
{
Debug.Log (ToString());
}
//같은 식으로 재정의해서 사용 가능하다.
//String.Format은 서로 다른 문자와 값들을 포함하는 문자열을 한 줄로 만들 때 유용하다.
--
플래그를 이용하여 디버그 한번에 켜고 끄기
//디버그 절과 코드 절을 분리해둔다.
Void Start()
{
#if SHOW_DEBUG_MESSAGES
Debug.Log ("ToString());
#endif
//이 부분은 SHOW_DEBUG_MESSAGES 유무에 상관없이 실행된다.
Debug.Log("Start");
}
// Edit-Project Settings-Player를 선택한 후, Scripting Define Symbols 필드에 SHOW_DEBUG_MESSAGES를 입력 후 엔터를 치면 디버그 절이 활성화된다.
// 복수의 선언은 ;로 구분해 넣으면 되고, 선언을 제거하려면 이름 앞에 /를 넣으면 제거가 되기 때문에 재활성화할 일이 있을 것 같을 때는 /를 붙여넣자.
--
기즈모 관련 부분은 별로 안써봐서 이해가 안되니 나중에 다시 볼 것 (92p부터임)
--
오류 기록
테스터가 로그 파일을 보내 개발자의 오류 추적을 돕게 할 수 있다.
public class -생략
{
private System.IO.StreamWriter SW; // StreamWriter 내부 참조변수
public string LogFileName = "log.txt";
void Start()
{
DontDestroyOnLoad(gameObject); // 오브젝트를 파괴하지 않고 유지
SW = new System.IO.StreamWriter(Application.persistentDataPath + "/" + LogFileName); // 문자열 기록 오브젝트 생성
Debug.Log(Application.persistentDataPath + "/" + LogFileName);
}
//예외를 받아 기록하도록 등록
void OnEnable()
{
Application.RegisterLogCallback(HandleLog); // 오류 발생시 HandleLog 함수 실행 (델리게이트 이용)
}
//예외 수신 등록 해제
void OnDisable()
{
Application.RegisterLogCallback(null);
}
//예외를 파일로 기록
void HandleLog(string logString, string stackTrace, LogType type)
{
if(type == LogType.Exception || type == LogType.Error)
{
SW.WriteLine("Logged : " + System.DateTime.Now.ToString() + "/" + logString + "/" + stackTrace + "/" + type.ToString());
}
}
//오브젝트 파괴시 호출
void OnDestroy()
{
SW.Close();
}
}
--
델리게이트란?
변수를 만들고 함수에 대한 참조를 할당 시, 변수를 불러서 함수처럼 함수의 참조를 호출 가능해짐.
새 함수나 기존 함수에 대한 참조를 후에 다시 할당할 수도 있음.
--
프로파일러는 집에 유니티가 프로버전이 아니므로 생략.
--
모노디벨롭도 비주얼쓰므로 생략. (다만 나중에 따로 해보긴 하자)