일반적인 디버깅에서 생성된 예외(그림 참조)와 사용자 입력이 올바른지 여부를 판단하는 데 사용되는 try throw 예외 사이에 본질적인 차이가 있습니까? C++에는 전자가 포함되나요, 아니면 후자만 포함되나요?
위에 언급된 첫 번째 예외는 무엇으로 판단되나요? 예를 들어 그림의 accedd 위반은 컴파일러나 IDE의 다른 도구에 의해 판단되나요?
@Evian 말씀하신 내용이 일리가 있으니 보충제를 만들어 보겠습니다
C++의 예외는 C++에서 발생한 예외만 잡을 수 있습니다. 간단히 말하면, 자체적으로 발생하는 예외만 포착할 수 있습니다(작성한 코드뿐만 아니라 런타임 라이브러리에도 국한되지 않음).
사실 C++에서 발생한 예외는 단지 정의되고 예측 가능하기 때문에 실제 예외는 아닙니다. 실제 예외는 실행 후에 CPU에 의해서만 트리거됩니다. 즉, 하드웨어에서 발생하는 예외입니다.
하드웨어는 C++에 직접적으로 관심을 두지 않으며 이를 처리하도록 운영 체제에 맡깁니다. 운영 체제가 다르면 예외 처리도 일관성이 없지만 상위 언어로 전달되지는 않습니다.
비교적 완전한 Windows 예외 처리를 예로 들면
디버거에 맡기세요(프로세스를 디버깅해야 함)
VEH 실행
SEH 실행
TopLevelEH(디버깅 시 프로세스가 실행되지 않음)
디버거에 맡기세요(위 예외처리에서 처리가 안된다고 해서 다시 디버거에 넘겼습니다)
통화 예외 포트 알림 csrss.exe
메모리 읽기 위반은 하드웨어에 의해 결정된 다음 처리를 위해 운영 체제로 전달됩니다. (저는 C++에 대해 잘 모르지만 이것은 C++ 예외와 같지 않고 Windows에서 발생하는 예외입니다.)
귀하의 의견을 이해하지 못했습니다. 일부 라이브러리에는 예외 클래스가 내장되어 있으며 예외 클래스를 사용자 정의할 수도 있습니다. 결국에는 모두 std::exception에서 상속됩니다. 또한 이는 런타임 예외이며 컴파일러나 IDE와는 아무 관련이 없습니다.
std::exception
@Evian 말씀하신 내용이 일리가 있으니 보충제를 만들어 보겠습니다
C++의 예외는 C++에서 발생한 예외만 잡을 수 있습니다. 간단히 말하면, 자체적으로 발생하는 예외만 포착할 수 있습니다(작성한 코드뿐만 아니라 런타임 라이브러리에도 국한되지 않음).
사실 C++에서 발생한 예외는 단지 정의되고 예측 가능하기 때문에 실제 예외는 아닙니다. 실제 예외는 실행 후에 CPU에 의해서만 트리거됩니다. 즉, 하드웨어에서 발생하는 예외입니다.
하드웨어는 C++에 직접적으로 관심을 두지 않으며 이를 처리하도록 운영 체제에 맡깁니다. 운영 체제가 다르면 예외 처리도 일관성이 없지만 상위 언어로 전달되지는 않습니다.
비교적 완전한 Windows 예외 처리를 예로 들면
디버거에 맡기세요(프로세스를 디버깅해야 함)
VEH 실행
SEH 실행
TopLevelEH(디버깅 시 프로세스가 실행되지 않음)
디버거에 맡기세요(위 예외처리에서 처리가 안된다고 해서 다시 디버거에 넘겼습니다)
통화 예외 포트 알림 csrss.exe
메모리 읽기 위반은 하드웨어에 의해 결정된 다음 처리를 위해 운영 체제로 전달됩니다. (저는 C++에 대해 잘 모르지만 이것은 C++ 예외와 같지 않고 Windows에서 발생하는 예외입니다.)
귀하의 의견을 이해하지 못했습니다. 일부 라이브러리에는 예외 클래스가 내장되어 있으며 예외 클래스를 사용자 정의할 수도 있습니다. 결국에는 모두
std::exception
에서 상속됩니다. 또한 이는 런타임 예외이며 컴파일러나 IDE와는 아무 관련이 없습니다.