2011-08-31 3 views
5

프로그램에서 실수로 뮤텍스 핸들 (이미 닫힌 핸들을 닫음)에서 closeHandle()을 두 번 호출했습니다.특정 예외 오류는 디버거에서만 발생합니까?

디버거에서 코드를 실행할 때 예상대로 예외 오류 An invalid HANDLE was specified.가 표시됩니다.

그러나 프로그램을 "독립 실행 형"(디버거 외부)으로 실행하면 예외가 나타나지 않거나 다른 오류가 발생합니다. 프로그램이 정상적으로 실행되는 것 같습니다.

이 설정은 Visual Studio .NET 2003에 있습니까? 아니면 뒤에 있습니까?

+6

이는 closeHandle()의 동작을 문서화 한 것입니다. http://msdn.microsoft.com/en-us/library/ms724211%28v=vs.85%29.aspx를 참조하십시오. "응용 프로그램이 디버거에서 실행중인 경우 함수는 다음 중 하나를 받으면 예외를 throw합니다. 유효하지 않은 값 또는 의사 처리 값을 처리하십시오. " – user168715

+0

아마도 VS .NET에서 디버그 빌드를 실행하고 있지만 두 번 클릭하여 릴리스 빌드를 실행하고 있습니까? –

+0

나는 assert와 비슷한 동작을 보았다. 조건부 컴파일이 가능합니다. –

답변

5

documentation 상태 : 유효하지 않은 핸들 값 또는 의사 핸들 값 중 하나를 수신하는 경우

응용 프로그램이 디버거에서 실행되는 경우는, 함수가 예외를 발생한다. 핸들을 두 번 닫거나 FindClose 함수를 호출하는 대신 FindFirstFile 함수에서 반환 한 핸들에서 CloseHandle을 호출하면이 문제가 발생할 수 있습니다.

+0

"예외를 던져라"! 나는 MSDN 문서 작성자가 더 잘 알 것을 기대합니다. C 함수는 예외를 throw하지 않습니다. Win32 예외 (일명 구조적 예외 처리)의 컨텍스트에서는 예외가 * 발생한 *, throw되지 않습니다. –

관련 문제