찾다

 >  Q&A  >  본문

C++의 예외에 대해?

  1. 일반적인 디버깅에서 생성된 예외(그림 참조)와 사용자 입력이 올바른지 여부를 판단하는 데 사용되는 try throw 예외 사이에 본질적인 차이가 있습니까? C++에는 전자가 포함되나요, 아니면 후자만 포함되나요?

위에 언급된 첫 번째 예외는 무엇으로 판단되나요? 예를 들어 그림의 accedd 위반은 컴파일러나 IDE의 다른 도구에 의해 판단되나요?

给我你的怀抱给我你的怀抱2752일 전1169

모든 응답(3)나는 대답할 것이다

  • phpcn_u1582

    phpcn_u15822017-06-30 09:59:21

    @Evian 말씀하신 내용이 일리가 있으니 보충제를 만들어 보겠습니다

    • C++의 예외는 C++에서 발생한 예외만 잡을 수 있습니다. 간단히 말하면, 자체적으로 발생하는 예외만 포착할 수 있습니다(작성한 코드뿐만 아니라 런타임 라이브러리에도 국한되지 않음).

    • 사실 C++에서 발생한 예외는 단지 정의되고 예측 가능하기 때문에 실제 예외는 아닙니다. 실제 예외는 실행 후에 CPU에 의해서만 트리거됩니다. 즉, 하드웨어에서 발생하는 예외입니다.

    • 하드웨어는 C++에 직접적으로 관심을 두지 않으며 이를 처리하도록 운영 체제에 맡깁니다. 운영 체제가 다르면 예외 처리도 일관성이 없지만 상위 언어로 전달되지는 않습니다.

    • 비교적 완전한 Windows 예외 처리를 예로 들면

    1. 디버거에 맡기세요(프로세스를 디버깅해야 함)

    2. VEH 실행

    3. SEH 실행

    4. TopLevelEH(디버깅 시 프로세스가 실행되지 않음)

    5. 디버거에 맡기세요(위 예외처리에서 처리가 안된다고 해서 다시 디버거에 넘겼습니다)

    6. 통화 예외 포트 알림 csrss.exe

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-30 09:59:21

    메모리 읽기 위반은 하드웨어에 의해 결정된 다음 처리를 위해 운영 체제로 전달됩니다. (저는 C++에 대해 잘 모르지만 이것은 C++ 예외와 같지 않고 Windows에서 발생하는 예외입니다.)

    회신하다
    0
  • 怪我咯

    怪我咯2017-06-30 09:59:21

    귀하의 의견을 이해하지 못했습니다. 일부 라이브러리에는 예외 클래스가 내장되어 있으며 예외 클래스를 사용자 정의할 수도 있습니다. 결국에는 모두 std::exception에서 상속됩니다. 또한 이는 런타임 예외이며 컴파일러나 IDE와는 아무 관련이 없습니다.

    회신하다
    0
  • 취소회신하다