Подтвердить что ты не робот

Подавление исключений из первых шансов

Можно ли подавить первые случайные супрессии в Visual Studio (отладчик С#) для определенных строк кода?

Я хочу использовать исключения с первым шансом в отладчике, но есть около 50 первых случайных исключений. Мне нужно пройти каждую сессию отладки, прежде чем я получу интересный код.

В настоящее время я отключу первые случайные исключения, а затем вручную включите их, но это затруднительное положение и время.

4b9b3361

Ответ 1

Класс DebuggerNonUserCodeAttribute

Как и в случае с .NET 2.0, если вы отметите метод с атрибутом [ DebuggerNonUserCode], отладчик будет пропустите первые исключения в нем.

Цитата из ссылки MSDN (выделено мной мое):

Участники которые не являются частью кода специально созданный пользователем, может усложняют процесс отладки. Этот атрибут подавляет отображение этих вспомогательных типов и членов в окно отладчика и автоматически шаги, а не в, дизайнер предоставил код.

Не существует поведения во время выполнения, кроме отладки, связанного с этим атрибутом.

Однако, если у вас есть только один метод с определенными строками, предназначенными для включения в механизм обработки исключительных ситуаций 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;
    }
}

В статье показаны соответствующие параметры проекта VS, которые могут быть полезны.
alt text

Ответ 2

Это происходит потому, что вы неправильно используете исключения. Получение 50 до того, как вы попадете в "интересный код", не является хорошим знаком. В Visual Studio нет способа пропустить их в некотором коде, потому что он не предназначен для поощрения того, что вы делаете.

Тем не менее, то, что я сделал бы, было бы отключить обнаружение исключений первого шанса в отладчике, явно try/catch исключение, которое вы хотите поймать, и поставить Debugger.Break(), когда вы его поймали.