C++빌더 10.4.2 예외 처리
- 2021-04-07
- Posted by: Narae Kim
- Categories: 기술자료, 메인 노출
원문 링크: https://blogs.embarcadero.com/robust-exception-handling-in-cbuilder-10-4-2/
원문 작성자: 데이비드 밀링턴 (David Millington)
품질 릴리즈
C++빌더 10.4.2에는 개발을 더욱 쉽게 만들어줄 정말 멋진 기능들이 많습니다. 그 중에서도 ‘split DWARF’가 있는데요. 디버그 정보를 제거해 링커에서 메모리 사용량을 줄여주는 기능입니다. 프로젝트에서 링커 제한이 필요하다면 꼭 이 기능을 확인해보세요. RAD스튜디오 10.4.2는 ‘품질 릴리즈’라고 불러도 될 정도로 전반적인 기능들이 향상되었습니다.
C++빌더도 여기서 예외일 수 없죠.
C++ 예외 처리
10.4.2를 통해 예외 처리 기능을 활용해보세요. 왜 품질 릴리즈라는 표현을 썼는지 이해가 되실 거에요. TLDR이라는 게 있는데요. 10.4.2로 앱의 안정성은 물론 예외 처리에 적합한 동작을 제공합니다.
엠바카데로의 이슈 레포트를 늘 분석하고 내부적으로 이슈 파악을 위한 다양한 작업들을 하고 있습니다. 이러한 작업 중 하나는 바로 C++ 라이브러리 지원입니다: 외부 코드를 엠바카데로 툴 체인과 호환되도록 할 수 있는 좋은 방법이죠. 분석 작업을 통해 10.4.2 버전에서는 윈도우의 예외 처리 기능들을 대부분 수정할 수 있었습니다.
분석한 시나리오들은 다음과 같습니다:
- 모듈 내 예외처리 (In-module exceptions)는 동일한 바이너리에서 발생하고 처리하는 것을 의미합니다. 하나의 EXE에서 모든 작업이 이루어집니다.
- 모듈 간 예외처리 (Cross-module exceptions)는 모듈 경계에서 하게 되는데, DLL에서 발생하고 EXE에서 처리하는 것 입니다. 핸들링하기에 더 어려운 케이스로, 코딩 가이드에서는 다른 모듈에서는 예외가 발생하지 않도록 할 것을 권고합니다. 이와 같은 문제가 발생한다면, 그 코드를 살펴보아야 합니다. 반드시 해결해야 하는 중요한 경우이죠. 패키지나 여러 DLL, EXE가 하나의 앱에 모두 묶여 있는 경우에 흔히 발생합니다.
- 언어 간 예외처리 (Cross-language exceptions)는 델파이와 C++이 모두 관련되어 있는 스택 프레임에서 하게 되는 것으로, 하나의 언어에서 발생하고 다른 언어에서 처리할 수 있습니다.
- 모든 모듈 (예. EXE와 DLL 모두)이 정적으로 연결되어 있는 상태 또는 모든 모듈이 동적으로 연결된 케이스 (dynamic RTL)가 있습니다.
- OS, C++, SEH 예외
- Win32, Win64 플랫폼
위와 같은 시나리오들, 특히 서로 다른 모듈들이 연결되어 있는 케이스들은 굉장히 복잡합니다. 대표적인 이유 중 하나는 RTL에서 예외 또는 예외 메타 데이터의 할당 자체를 핸들링하기 때문입니다. 예를 들어, RTL 복사본과 정적으로 연결되어 있는 DLL이 있고 여기서 예외 처리를 해야 한다고 해봅시다. 그럼 RTL 복사본과 정적으로 연결되어 있을 때, 또는 동적으로 연결되어 있지만 RTL의 다른 복사본이 있는 DLL이 예외를 발생 시킨다면, EXE는 어떻게 예외 관련 여유 메모리를 처리할 수 있을까요?
10.4.2에서는 이렇게 복잡한 상황들도 모두 처리합니다. 모든 모듈이 정적 또는 동적으로 연결되어 있더라도 말이죠. 단, 하나의 애플리케이션에서 RTL이 동적/정적 모두 혼합되어 있는 모듈 간 예외 처리는 지원하지 않습니다.
즉 10.4.2에서는 모듈 내 예외 처리, 모듈 간 예외 처리, OS와 C++ 그리고 SEH 예외, Win32/Win64 모든 상황에서 모듈이 정적 또는 동적으로 연결되어 있다면 예외 처리가 가능합니다. 대규모 테스트 매트릭스에 대한 예외 처리 동작이 크게 개선되었고, 품질 문제가 해소되었음을 의미합니다.
엠바카데로는 모든 출시에서 C++빌더를 꾸준히 개선하는 것을 목표로 하고 있습니다. 그리고 10.4.2는 그렇게 한 발 더 나아간 버전이라고 할 수 있죠.
12.0 12.1 AI AWS C++ c++빌더 chatgpt DelphiCon ios rad서버 RAD스튜디오 UI UIUX UX uxsummit vcl 개발 개발사례 고객사례 기술레터 기술백서 데브옵스 데이터 데이터베이스 델파이 리눅스 마이그레이션 맥 머신러닝 모바일 새버전 샘플 세미나 안드로이드 웹 윈도우 인공지능 인터베이스 출시 커뮤니티에디션 코드 클라우드 파이썬 파이어몽키 현대화