문제

특정 코드 라인에 대해 Visual Studio (C# Debugger)의 첫 번째 기회 억제를 억제 할 수 있습니까?

디버거에서 첫 번째 기회 예외를 사용하고 싶지만 흥미로운 코드에 도달하기 전에 모든 디버그 세션을 거쳐야하는 약 50 개의 첫 번째 기회가 있습니다.

현재 첫 번째 기회 예외를 끄고 수동으로 켜지지 만 번거 로움과 시간 싱크입니다.

도움이 되었습니까?

해결책

DebuggerNonuserCodeAttribute 클래스

.NET 2.0 기준으로 메소드를 표시하면 [DebuggerNonuserCode] 속성, 디버거는 첫 번째 기회 예외를 건너 뜁니다.

MSDN 링크의 인용문 (강조 추가 IS MINE) :

사용자가 특별히 생성 한 코드의 일부가 아닌 멤버 디버깅 경험을 복잡하게 할 수 있습니다. 이 속성은 디버거 창에 이러한 보조 유형과 멤버의 표시를 억제하고 자동으로 단계를 밟습니다., 디자이너는 코드를 제공하지 않고 코드를 제공했습니다.

이 속성과 관련된 디버깅 외에는 런타임 동작이 없습니다.

그러나 Visual Studio의 첫 번째 기회 예외 처리 메커니즘에 포함시키기위한 특정 라인이있는 방법이 하나만 있으면 제외 할 다른 라인이 있다면이 수준의 세분성에는 해결책이 없을 것입니다. 항상 큰 메소드를 여러 메소드로 리팩터링하고 선택한 방법에서 속성을 사용할 수 있습니다.


추가 정보...

예제 사용 이 기사

using System.Diagnostics;
using XL = Microsoft.Office.Interop.Excel;

public static class WorkbookExtensions
{
    [DebuggerNonUserCode]
    public static bool TryGetWorksheet(this XL.Workbook wb, string worksheetName, out XL.Worksheet retrievedWorksheet)
    {
        bool exists = false;
        retrievedWorksheet = null;

        try
        {
            retrievedWorksheet = GetWorksheet(wb, worksheetName);
            exists = retrievedWorksheet != null;
        }
        catch(COMException)
        {
            exists = false;
        }

        return exists;
    }

    [DebuggerNonUserCode]
    public static XL.Worksheet GetWorksheet(this XL.Workbook wb, string worksheetName)
    {
        return wb.Worksheets.get_Item(worksheetName) as XL.Worksheet;
    }
}

기사 유용 할 수있는 관련 대 프로젝트 옵션을 보여줍니다.
alt text

다른 팁

이것은 당신이 잘못 사용하는 예외이기 때문에 일어나고 있습니다. "흥미로운 코드"에 도달하기 전에 50을 얻는 것은 좋은 신호가 아닙니다. Visual Studio에는 일부 코드로 건너 뛰는 방법이 없습니다. 왜냐하면 당신이하고있는 일을 장려하도록 설계되지 않았기 때문입니다.

즉, 내가하는 일은 디버거에서 첫 번째 기회를 잡는 것입니다. try/catch 당신이 잡고 싶어하는 예외, Debugger.Break() 당신이 그것을 잡았을 때.

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