여기서 줄 사이를 올바르게 읽고 있다면 기본 디버거 동작이 처리되지 않은 예외에서 중단 되더라도 예외가 효과적으로 '사라진다'는 문제입니다.
비동기 메서드가있는 경우 작업 연속의 일부로 스레드 풀 스레드에서 포착되지 않은 예외는 처리되지 않은 예외로 간주되지 않기 때문에이 문제가 발생할 수 있습니다. 오히려 그들은 삼켜지고 Task와 함께 저장됩니다.
예를 들어 다음 코드를 살펴보십시오.
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
기본 디버거 설정 (처리되지 않은 예외에서만 중지)으로이 프로그램을 실행하면 디버거가 중단되지 않습니다. 이는 연속에 할당 된 스레드 풀 스레드가 예외를 삼켜 (Task 인스턴스로 전달) 풀로 다시 해제되기 때문입니다.
이 경우 실제 문제는에서 Task
반환 된 항목 Test()
이 확인되지 않는다는 것입니다. 코드에 유사한 유형의 '실행 후 삭제'로직이있는 경우 예외가 throw 될 때 예외가 표시되지 않습니다 (메서드 내에서 '처리되지 않은'경우에도). 예외는 대기, 결과 확인 또는 명시 적으로 예외를 확인하여 Task를 관찰 할 때만 나타납니다.
이것은 추측 일 뿐이지 만 이와 같은 것을 관찰하고있을 가능성이 높습니다.
Tool
또는Window
탭에 원하는 모든 위치가 없는 경우 이전 버전의 현재 레이아웃을 유지합니다 . 귀하의 경우 예외 설정을 찾고 있습니다.