문제

내 대 디버거에 이상한 문제가 있습니다.vs 디버거에서 내 프로그램을 실행할 때 디버거는 처리되지 않은 예외로 인해 중단되지 않습니다.대신 프로그램이 정상적으로 종료된 것처럼 제어가 VS로 반환됩니다.출력 탭을 보면 스레드 종료 직전에 첫 번째 예외가 나열되어 있습니다.

디버그 메뉴에서 "예외" 상자를 사용하는 방법을 이해합니다.처리되지 않은 예외에 대한 중단을 확인했습니다.발생하는 특정 예외에 대해 첫 번째 예외를 확인하면 디버거가 중지됩니다.

그러나 'Unhandled-Exceptions'에서도 디버거가 중지되어야 한다는 것이 내 이해입니다.나를 위해 이런 일을 하는 것이 아닙니다.

내 출력 탭의 마지막 몇 줄은 다음과 같습니다.

A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
The thread 0x60c has exited with code 0 (0x0).
The program '[3588] ALMSSecurityManager.vshost.exe: Managed' has exited with code -532459699 (0xe0434f4d).

예외가 처리되지 않은 경우 "첫 번째 기회" 예외로 표시되는 이유를 이해할 수 없습니다.

0xe0434f4d 종료 코드는 일반적인 COM 오류라고 생각합니다.

어떤 아이디어가 있나요?

지하철.

도움이 되었습니까?

해결책

64비트 OS를 사용하는 경우 예외를 사라지게 하는 OS 수준 동작에 물릴 가능성이 꽤 높습니다.이를 재현하는 가장 안정적인 방법은 단순히 OnLoad에서 예외를 발생시키는 새로운 WinForm 응용 프로그램을 만드는 것입니다.던져지지 않을 것 같습니다.다음을 살펴보세요:

  1. Windows 64비트에서 처리되지 않은 예외로 인해 Visual Studio가 중단되지 않습니다.
    • http:// social.msdn.microsoft.com/Forums/en/vsdebug/thread/69a0b831-7782-4bd9-b910-25c85f18bceb
  2. OnLoad 예외가 사라지는 경우
  3. x64 개발 컴퓨터의 자동 예외(Microsoft Connect)
    • https:// connect.microsoft.com/VisualStudio/feedback/details/357311/silent-Exceptions-on-x64-development-machines

첫 번째는 제가 Google에서 찾은 것입니다(이 스레드가 도움이 되지 않은 후). 그 스레드는 나를 다음 두 가지로 이끌었습니다.두 번째는 가장 좋은 설명이고, 세 번째는 Microsoft 버그/티켓입니다(이는 "설계상" 동작임을 재확인합니다).

따라서 기본적으로 애플리케이션이 스택을 백업하는 도중 커널 모드 경계에 부딪히는 예외가 발생하면 해당 경계에서 차단됩니다.그리고 Windows 팀은 이를 처리하는 가장 좋은 방법은 예외가 처리된 것처럼 가장하는 것이라고 결정했습니다.모든 것이 정상적으로 완료된 것처럼 실행이 계속됩니다.

아, 이런 일이 일어나다니 어디에나.디버그와 릴리스는 관련이 없습니다..Net 대 C++는 관련이 없습니다.이는 OS 수준 동작입니다.

일부 중요한 데이터를 디스크에 써야 하는데 커널 모드 경계의 잘못된 쪽에서 실패한다고 상상해 보세요.나중에 다른 코드에서 이를 사용하려고 시도하고 운이 좋다면 데이터에 문제가 있음을 발견할 수 있습니다. 그런데 왜 그럴까요?여러분은 애플리케이션이 데이터 쓰기에 실패했다는 사실을 결코 고려하지 않을 것입니다. 왜냐하면 여러분은 예외가 발생할 것이라고 예상했기 때문입니다.

바보.

다른 팁

"예외..." 대화 상자에 두 개의 확인란이 있다는 답변을 읽었을 때 돌아가서 대화 상자를 다시 열었습니다."Thrown"에 대한 중단을 위한 확인란 열이 하나만 있었습니다.

디버그 옵션에서 "내 코드만 사용(관리 전용)"을 선택하지 않으면 "사용자 처리되지 않은" 열이 "예외" 대화 상자에 표시되지 않습니다.

"내 코드만 활성화" 옵션을 선택하고 모든 예외 범주에 대해 "예외" 대화 상자의 "사용자 처리되지 않은" 확인란이 선택되었는지 확인했습니다.

한 세션 동안 디버거에 침입하는 처리되지 않은 예외를 얻을 수 있었습니다.그런데 다음 날 다시 돌아왔을 때 행동은 예전과 같았습니다.

지하철.

Ctl-D, E를 누르면 예외 창이 나타납니다.중단하고 싶지 않은 예외를 설정할 수 있습니다.

"예외..." 상자에는 두 개의 확인란이 있습니다. 일반적으로 처리되지 않은 예외가 발생하도록 하려면 두 확인란을 모두 선택해야 합니다.그럼에도 불구하고 하나만 확인해야 하는 것처럼 읽혀집니다.

나에게도 이런 일이 가끔 일어난다.시나리오를 복제할 때 예외가 포착되어 평소처럼 표시되므로 버그 같은 것 같습니다.

비슷한 문제가 있었고 "내 코드만 활성화(관리 전용)"를 선택하면 문제가 해결되었지만 다시 끄면 문제가 다시 발생했지만 이유는 알 수 없습니다(그러나 일부 DLL이 선택 취소하면 로드되어 동작이 발생합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top