2013-12-17 3 views
0

때때로 StackOverFlowException을 던질 수있는 속성으로 흩어져있는 타사 라이브러리를 디버깅하고 있습니다.StackOverflowException이 Visual Studio에서 디버거를 충돌시키지 않도록 할 수 있습니까?

조사 식 창에서이 라이브러리의 개체를 볼 때마다 "기능 평가가 중단되었습니다."라는 오류 메시지가 나타나고 디버깅중인 응용 프로그램이 충돌합니다.

private static int CausesStackoverflow 
    { 
     get { return CausesStackoverflow; } 
    } 

내 응용 프로그램으로 인한 충돌 위험없이 조사 식 창에서 속성을 평가하기 위해 어떤 방법이 있나요 :

나는 (조사 식 창에서 평가하려고 할 때)이 재현 속성의 예를 썼다 Stackoverflow에?

+0

예제 코드가 무한 재귀라고 알려주기 위해 조사 식 창이 필요합니까? –

+0

분명히하자면 : 귀하의 단순한 부동산 샘플이 단순하지 않고 고장났습니다. 또한 StackOverflow를 사용하면 응용 프로그램이 종료됩니다. 정확하게 당신은 무엇을 기대하고 있습니까? StackOverflow에서 복구 할 적절한 방법은 없습니다. http://msdn.microsoft.com/en-us/library/system.stackoverflowexception%28v=vs.110%29.aspx – Samuel

+0

예, Watch Window에서 평가 된 함수에 의해 StackoverflowException이 발생했음을 알리고 싶습니다. 전체 응용 프로그램을 손상시키지 않습니다. 포함 된 코드 조각은 예제와 같습니다. 깨 졌음을 알지만 디버깅하려는 타사 코드를 변경할 수는 없습니다. –

답변

0

은 카운터 또는 다른 트릭을 사용하여을 차단해야하며 StackOverflow 예외가 아닙니다. 이 제 3 자 코드이기 때문에

이 시도 할 수 있습니다 (그래서 나는 그것을 변경할 수 없습니다 가정) :


이 2.0 은 다음과 같은 경우에서 잡은 할 수있는 StackOverflow의 예외를 시작.

  1. CLR에 유래 예외가 실제 스택 오버 플로우 상황 (참조에 의한
  2. 유래 예외는 사용자 코드에 의해 발생되고,하지 처리하는 호스트 특별히 허용 호스팅 환경에서 실행되고 MSDN StackOverflowException page에서)

:

닷넷 프레임 워크의 이전 버전에서

, 응용 프로그램이 잡을있는 StackOverflowException 개체 (예를 들어, 무제한의 재귀를 복구하는) 수 있습니다. 그러나 연습은 현재 인데, 스택을 안정적으로 catch하고 프로그램 실행을 계속하려면 중요한 추가 코드가 이어야하므로 실망입니다. 닷넷 프레임 워크 버전 2.0을 시작으로

는하는있는 StackOverflowException 객체는 시도 - 캐치 블록에 의해 체포하고 해당 프로세스는 기본적으로 종료 입니다 수 없습니다. 결과적으로 사용자는 코드를 작성하여 스택을 감지하고 방지합니다. 오버플로. 예를 들어 응용 프로그램이 재귀에 종속되어있는 경우 카운터 또는 상태 조건을 으로 지정하면 재귀 루프가 종료됩니다. 를 참고 는 CLR이 스택 오버 플로우 예외가 발생 응용 프로그램 도메인을 언로드 것을 지정하고 해당 프로세스를 계속 할 수있는 공용 언어 런타임 (CLR)을 호스팅하는 응용 프로그램입니다. 에 대한 자세한 내용은 ICLRPolicyManager Interface 및 공용 언어 런타임 호스팅을 참조하십시오.