센로그
[ED] 7. 빌드 및 실행 환경을 다양하게 구성하기 본문
소프트웨어를 다른 환경에서 컴파일 또는 실행해보면 문제를 찾을 수도 있다.
- 프로세서 아키텍처
- 아키텍처 별로 바이트 순서, 널 포인터 처리 방식 등 동작이 다르곤 함.
- 현재는 Intel과 ARM 아키텍처로 좁혀졌음에도, 여전히 아키텍쳐로 인한 차이가 존재함
- ex) 메모리 레이아웃이나 잘못 정렬된 메모리 접근을 처리하는 방식이 다름
- 아키텍처의 비트 수에 따라서도 동작이 달라짐.
- 보통 N비트 아키텍처~ 이런 건 CPU가 한 번에 처리할 수 있는 데이터 크기와 메모리 주소 공간 크기를 의미함
- 예를들어 long의 사이즈, char* 사이즈 같은 근본적인 값도 OS나 비트수에 따라 달라지곤 함.
- 보통 N비트 아키텍처~ 이런 건 CPU가 한 번에 처리할 수 있는 데이터 크기와 메모리 주소 공간 크기를 의미함
다른 환경 사용하는법
- Virtual Machine 사용하기
- 라즈베리 파이 사용하기
- 클라우드 임대하기
컴파일러 또한 여러 컴파일러를 함께 사용하면 다양한 문제를 찾을 수 있을 것이다.
- 컴파일러마다 컴파일 방식, 최적화 기법, 언어 지원 수준 ... 등이 다르기 때문
나의 생각
- 기본적으로 멀티 플랫폼 프로그래밍 할 때는 같은 값이 보장된다는 생각을 버려야 하는 것 같다.
- 그렇지 않으면 생각지도 못한 부분에서 디버깅이 엄청나게 힘들어질 듯
+) Unity에서 Mono와 IL2CPP의 차이
- Mono
- .NET 기반 런타임 환경
- JIT(Just In Time) 컴파일 사용.
- 런타임 시점에 필요한 코드 단위로 컴파일
- C# 코드 → IL 코드 → (런타임) 기계어로 컴파일
- 장단점
- 장점
- 빌드가 빠르다.
- 디버깅이 편하다.
- 단점
- 비교적 실행 성능이 떨어질 수 있다
- iOS는 JIT 컴파일 지원 안 함.
- 장점
- IL2CPP (IL코드 to CPP)
- Unity 자체 개발 런타임 환경
- AOT(Aheadr Of Time) 컴파일 사용.
- 실행 전에 전체 애플리케이션을 컴파일
- C# 코드 → IL 코드 → C++ 코드 → (실행 이전에) 기계어로 컴파일 후 실행
- 장단점
- 장점
- 비교적 실행 성능이 좋다
- 선 컴파일 후 빌드되므로 보안성이 좋다
- iOS도 지원함
- 단점
- 빌드 시간이 길어진다.
- 비교적 디버깅이 어렵다.
- 장점
+) 그럼 IL2CPP로 컴파일하면 리플렉션을 못 쓰나?
- 사용할 수 있으나, 제한적이며 비교적 불편하다.
- 컴파일러에게 해당 코드가 리플렉션에 사용된다는 것을 알리는 특수한 설정이나 플래그가 필요하다.
- Link.xml 파일 설정
- BindingFlags.NonPublic 플래그 등
- 참고자료
'Effective > Effective Debugging' 카테고리의 다른 글
[ED] 9. 성공적인 디버깅을 위한 마음가짐 (0) | 2024.11.12 |
---|---|
[ED] 8. 가장 중요한 문제에 집중하기 (0) | 2024.11.12 |
[ED] 6. 소프트웨어에서 제공하는 디버깅 기능 활용하기 (0) | 2024.11.12 |
[ED] 5. 정상 시스템과 비정상 시스템의 차이점 분석하기 (0) | 2024.11.11 |
[ED] 4. 문제 발생 지점부터 버그를 추적하거나, 프로그램 시작 지점부터 버그를 찾아나가기 (0) | 2024.11.11 |
Comments