센로그

[ED] 7. 빌드 및 실행 환경을 다양하게 구성하기 본문

Effective/Effective Debugging

[ED] 7. 빌드 및 실행 환경을 다양하게 구성하기

seeyoun 2024. 11. 12. 20:57

소프트웨어를 다른 환경에서 컴파일 또는 실행해보면 문제를 찾을 수도 있다.

  • 프로세서 아키텍처
    • 아키텍처 별로 바이트 순서, 널 포인터 처리 방식 등 동작이 다르곤 함.
    • 현재는 Intel과 ARM 아키텍처로 좁혀졌음에도, 여전히 아키텍쳐로 인한 차이가 존재함
      • ex) 메모리 레이아웃이나 잘못 정렬된 메모리 접근을 처리하는 방식이 다름
    • 아키텍처의 비트 수에 따라서도 동작이 달라짐.
      • 보통 N비트 아키텍처~ 이런 건 CPU가 한 번에 처리할 수 있는 데이터 크기와 메모리 주소 공간 크기를 의미함
        • 예를들어 long의 사이즈, char* 사이즈 같은 근본적인 값도 OS나 비트수에 따라 달라지곤 함.

 

다른 환경 사용하는법

  • 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로 컴파일하면 리플렉션을 못 쓰나?

 

Unity - Manual: Managed code stripping

Managed code stripping During the build process, Unity removes unused or unreachable code through a process called managed code stripping, which can significantly decrease your application’s final size. Managed code stripping removes code from managed as

docs.unity3d.com

 

Comments