Visual Studio : 처리 된 예외를 해결하는 방법?


165

처리 된 예외가 발생할 때 Visual Studio가 중단되기를 원합니다 (예 : "첫 번째 기회"메시지를보고 싶지 않고 실제 예외를 디버깅하고 싶습니다).

예를 들어 디버거가 예외에서 벗어나기를 원합니다.

try
{
   System.IO.File.Delete(someFilename);
}
catch (Exception)
{
   //we really don't care at runtime if the file couldn't be deleted
}

내가 건너 온 시각 Studio.NET을위한주의 사항 :

1) VS.NET에서 디버그 메뉴 >> "예외 ...">> "공용 언어 런타임 예외">> "시스템"으로 이동하여 "System.NullReferenceException"을 선택하십시오.

2) 대화 상자의 맨 아래에 "예외 발생시 :"그룹 상자가 있습니다. "디버거로 나누기"를 선택하십시오.

3) 시나리오를 실행하십시오. 예외가 발생하면 디버거가 중지되고 "System.NullReferenceException 유형의 예외가 발생했습니다. [Break] [Continue]"와 같은 대화 상자가 표시됩니다.

[Break]를 누르십시오. 이렇게하면 문제를 일으키는 코드 줄이 나타납니다.

그러나 Visual Studio 2005에는 적용되지 않습니다 ( 디버그 메뉴 에는 예외 옵션 이 없음 ).

" 디버거에 침입 "옵션이있는 " 예외가 발생했을 때 "그룹 상자 Visual Studio에서이 옵션 찾기 대화 상자의 위치를 ​​아는 사람이 있습니까?

업데이트 : 문제는 디버그 메뉴에 예외 항목 이 없다는 것 입니다. 메뉴를 수동으로 추가하도록 사용자 정의했습니다.


9
VS2015에서 그것은 Debug-> 윈도우 -> 예외 설정에서였다
PeterVermont

예외 설정 중 일부를 변경 한 후 기본 예외 설정 을 복원 하는 방법을 찾는 데 시간이 걸렸습니다 . 예외 설정을 기본값으로 복원
Mabito

답변:


170

솔루션을 연 상태에서 디버그-예외 ( Ctrl+ D, E) 메뉴 옵션으로 이동하십시오. 여기에서 Throw 또는 User-unhandled 예외 를 중단하도록 선택할 수 있습니다 .

편집 : 내 인스턴스가 C # "프로필"로 설정되어있을 수도 있습니다. 다른 프로필에는 없을까요?


10
나는 그런 옵션이 없다. 그것은 내 혼란을 설명 할 것입니다.
Ian Boyd

58
디버그 메뉴가 있지만 예외 옵션은 없습니다. 메뉴를 사용자 정의하여 수동으로 추가했습니다. 바로 가기 키는 어느 쪽이든 (Ctrl + Alt + E) 일
이안 보이드

3
또한 "도구", "내보내기 설정 가져 오기"로 이동하여 C # 환경으로 재설정을 선택하여 VS2010 환경을 재설정 할 수 있습니다. 여기에는 예외 하위 메뉴 항목
BeardinaSuit

14
Visual Studio 2017에서 Common Language Runtime Exceptions> <All Common Language Runtime Exceptions not in this list>를 선택 했으며 모든 꿈이 실현되었습니다.
Aaron Newton

9
Visual Studio 2015 : 디버그-> Windows-> 예외 설정
achecopar

47

VS2005에는 '예외'창이 있습니다 ... 디버깅 할 때 Ctrl+ Alt+를 시도 E하고 중지하려는 예외에 대해 'Thrown'확인란을 클릭하십시오.


정확히 내가 원하는 것입니다. 메뉴에서 어디입니까? 내 인생에서 나는 그것을 찾을 수 없습니다.
Ian Boyd

키보드 단축키는 프로파일 (C # 개발자, C ++ 개발자 등)에 따라 변경 될 수 있습니다.
Asaf R

1
메뉴 항목 : Debug-> Exceptions가 있습니다. VS2005 Professional과 함께 제공됩니다. Express Edition을 실행하고 있습니까?
Rob Walker

5
예외 메뉴 항목을 원하는 경우 : 도구 | 사용자 정의 .... 명령 탭을 클릭하십시오. 범주 상자에서 디버그 범주를 선택하십시오. 예외 ... 명령 항목을 찾은 다음 응용 프로그램 상단의 디버그 메뉴로 끌어 메뉴의 적절한 위치에 놓습니다. ( blogs.vertigo.com/personal/keithc/Blog/archive/2007/07/20/… 에 대한 의견에 있음 )
sotto

33

기대 설정을위한 새로운 장소를 찾기 위해 잠시 시간을 보냈으므로 새로운 대답입니다.

Visual Studio 2015부터는 예외 설정 창 (디버그-> Windows-> 예외 설정)에서 중지 할 예외를 제어합니다. 바로 가기는 아직 Ctrl- Alt- E.

사용자 정의 예외를 처리하는 가장 간단한 방법은 "이 목록에없는 모든 예외"를 선택하는 것입니다.

다음은 영어 버전의 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오

다음은 독일어 버전의 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오


16

Visual Studio 2015부터는 "예외 설정"대화 상자 ( Ctrl+ Alt+ E)로 이동하여 "공통 언어 런타임 예외"(또는 원하는 특정 예외 ArgumentNullException)를 확인하여 처리 된 예외에서 중단되도록해야합니다 .

1 단계 1 단계 단계 2 단계 2 단계


8

디버거를 사용하여 예외 관리 확인 페이지에서 하고이를 설정하는 방법을 설명합니다.

기본적으로 다음 단계가 있습니다 (디버깅 중).

  1. 디버그 메뉴에서 예외를 클릭하십시오.

  2. 예외 대화 상자에서 예외의 전체 범주 (예 : 공용 언어 런타임 예외)에 대해 발생을 선택하십시오.

    -또는-

    예외 범주 (예 : 공통 언어 런타임 예외)에 대한 노드를 펼치고 해당 범주 내의 특정 예외에 대해 Throwd를 선택하십시오.


1

내가 사용하는 기술은 다음과 같습니다. 디버깅하려는 대상에 따라 하나 또는 여러 개의 try catch 블록에 사용할 수있는 전역 변수를 정의하고 다음 구조를 사용하십시오.

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

IDE가 깨지기를 원하지 않는 예외가 여전히 있기 때문에 테스트 측면에서 좀 더 융통성이 있습니다.


3
이것은 유용한 기술입니다. 처리 된 예외를 처리되지 않은 예외로 바꾸어 디버거가 자동으로 중지합니다. GlobalTestingBool을 설정하는 좋은 방법이 없다면, 왜 다운 다운되었는지 확실하지 않습니다. 또 다른 더 나은 옵션은 Debugger.IsAttached를 사용하는 것입니다.
Joe White

모든 try / catch 주위에 이것을 추가하고 코드를 다시 컴파일해야합니다. 이미 디버깅 중이라면 유용하지 않습니다.
최대

예외적 인 조건 (허용 할 수없는 것)이있는 경우 코드에서 예외를 처리해야하며 처리 방법에 대한 결정을 내릴 수있는 수준에서 포착해야합니다. 이와 같은 코드는 실행 경로를 복잡하게 만듭니다.
Lee Oades

나는 이것이 정말 오래된 답을 알고 있지만, 나 같은 임의 Google 직원, 당신은 추가 할 수 있습니다catch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
월 'splite'K.

0

온라인 문서는 약간 불분명 해 보였으므로 약간의 테스트 만 수행했습니다. 예외 대화 상자에서 슬로우에 휴식을 선택하면 프로그램 실행에 중단됩니다 어떤 처리되거나 처리되지 않은 예외입니다. 처리 된 예외 만 위반하려면 코드를 통해 처리 된 모든 예외에 중단 점을 두는 것이 유일한 해결책입니다. 이것은 약간 과도하게 보이므로 예외를 처리 할 때마다 디버그 문을 추가하는 것이 좋습니다. 그런 다음 해당 출력을 볼 때 코드의 해당 줄에 중단 점을 설정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.