Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- C++
- UE4 커스텀로그
- stl
- 람다
- 약참조
- 선택정렬
- 알고리즘
- enumasByue
- map
- UE_LOG
- 람다사용정렬
- 데이터애셋
- 정렬
- 애셋로드
- dataasset
- UML관련
- unorder_map
- 크리티컬섹션
- moreeffectiveC++
- UELOG
- 델리게이트
- 정렬알고리즘
- 강참조
- 스마트포인터
- BFS
- C++최적화
- 자료구조
- 언리얼엔진구조체
- 프로그래머스
- 언리얼가비지컬렉터
Archives
- Today
- Total
기억을 위한 기록들
[UE-CPP] Assert 매크로들 본문
// assert 는 DO_CHECK = 1 일때만 실행
// check 는 false 값이면 실행을 중지
check(Mesh != nullptr);
checkf(MyPtr, TEXT("MyPtr is nullptr")); // false 이면 로그 출력
checkcodeMyPtr, TEXT("MyPtr is nullptr")); // checkf 와 비슷
checkNoEntry(); // 절대 실행될 리 없는 경로 표시
checkNoReentry(); // 호출 완료 전까지 다시 호출되면 안되는 경우 체크
checkNoRecursion(); // checkNoReentry() 와 동일
unimplemented(); // 반드시 재정의해야 하는 가상 함수를 표시하기 위해 사용
// verify 는 DO_CHECK = 1 이 아니어도 실행
verify(Mesh != nullptr); // 이하 다른 method 는 assert 와 유사
// ensure 은 콜스택을 생성한다
ensure(MyPtr != nullptr); // 이 지점까지의 콜스택 생성
ensureMsg(MyPtr, TEXT("log")); // 콜스택 생성 + 로그 출력
ensureMsgf(Success, TEXT("log")); // if 문의 조건문 안에 넣어 사용 가능
check 매크로들은 빌드 Shipping 되면서 check 안에 포함되어 있는 코드들이 빠지고 개발 단계에서만 확인 가능하고, ensure는 패키징 Shipping에서도 포함된다. 그러므로 ensure false가 있다면 패키징 실행에서 crash를 유발할 수 있다.
개인적으로도 check를 무결성을 확인하기에 만만하게 사용했다가, 패키징빌드에서 해당 코드가 빠져서 예상치 못한 문제를 발생시켰었다.
ex)
check(someActor->Destroy()); //destroy 잘됐나 확인하기 위해 넣었었지만,
//패키징 Shipping 되면서 해당 코드 자체가 없어져서 someActor의 Destroy 자체가 호출이 되질 않았다.
assert는 좀 더 코어 한 단계의 코드에서나, 절대적으로 문제를 확인해야 할 부분에서 ensure를 사용하는 게 좋은 것 같다.
출처:
'UnrealEngine > UnrealEngine C++ 관련' 카테고리의 다른 글
[UE-CPP] 부동소수점 비교시 (0) | 2023.05.14 |
---|---|
[UE-C++] 특정 액터가 블루프린트 상속받은지 확인하는 방법 (0) | 2023.03.02 |
UE - GAS(Game Ability System)에 관하여 (0) | 2023.03.01 |
[UECPP] 클래스이름 변경할때 블루프린트 애셋이 상속받고 있을 경우 (0) | 2023.02.10 |
[UE-C++] 델리게이트들과 이벤트 (0) | 2022.12.01 |