3.5. 명령 행 옵션을 사용하여 C++ 예외 처리

기본적으로, 또는 --exceptions 옵션이 지정된 경우 이미지에 예외 테이블이 포함될 수 있습니다. 코드에서 예외를 throw하지 않으면 예외 테이블이 자동으로 무시됩니다. 그러나 --no_exceptions 옵션이 지정되어 있는 경우 사용하지 않는 섹션이 제거된 후에 예외 섹션이 발견되면 링커가 오류를 생성합니다.

코드가 예외의 영향을 받지 않도록 하려면 --no_exceptions 옵션을 사용할 수 있습니다. 링커가 오류 메시지를 생성하여 예외가 발견되었고 최종 이미지를 생성하지 못했다는 것을 강조 표시합니다.

그러나 --no_exceptions 옵션과 --diag_warning 옵션을 함께 사용하여 오류 메시지를 경고로 다운그레이드할 수 있습니다. 링커는 최종 이미지를 생성하지만 예외가 발견되었다고 경고하는 메시지도 생성합니다.

링커에서 디버그 프레임 정보를 포함하는 레거시 개체에 대한 예외 테이블을 만들 수 있습니다. 링커는 C 및 어셈블리 언어 개체에 대해 안전하게 이 작업을 수행할 수 있습니다. 기본적으로 링커는 예외 테이블을 만들지 않습니다. 이것은 링커 옵션 --exceptions_tables=nocreate를 사용하는 것과 같습니다.

링커 옵션 --exceptions_tables=unwind를 사용하면 링커에서 .debug_frame 정보를 사용하여 아직 예외 테이블이 없는 이미지의 각 섹션에 대해 레지스터 복원 해제 테이블을 만들 수 있습니다. 이렇게 할 수 없는 경우에는 링커가 해제 없음 테이블을 만듭니다.

링커 옵션 --exceptions_tables=cantunwind를 사용하여 아직 예외 테이블이 없는 이미지의 각 섹션에 대해 해제 없음 테이블을 만듭니다.

Note

다음 사항에 유의하십시오.

  • 기본 설정 즉, --exceptions --exception_tables=nocreate를 사용하는 경우 C 또는 어셈블리 코드를 통해 예외를 안전하게 throw할 수 있습니다(--exceptions 옵션으로 C 코드를 컴파일하는 경우는 제외).

  • 링커는 레거시 C++ 코드(예를 들어, RVCT v1.2 또는 ADS v1.2)의 자동 변수에 필요한 정리 코드를 생성할 수 없습니다.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0206GK
Non-Confidential