Вопрос

Возможно ли подавить первые случайные подавления в Visual Studio (C # debugger) для определенных строк кода?

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

В настоящее время я отключаю исключения первого шанса, а затем включаю их вручную, но это хлопотно и отнимает много времени.

Это было полезно?

Решение

Класс DebuggerNonUserCodeAttribute debuggernononusercodeattribute

Начиная с .NET 2.0, если вы пометите метод с помощью [DebuggerNonUserCode Отладочный код] атрибут, отладчик пропустит в нем исключения первого шанса.

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

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

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

Однако, если у вас есть только один метод с определенными строками, предназначенными для включения в механизм обработки исключений Visual Studio first chance, и другими строками, подлежащими исключению, вероятно, нет решения на этом уровне детализации.Вы всегда можете преобразовать большой метод в несколько методов и использовать атрибут для выбранных из них.


Дополнительная информация...

Пример использования из эта статья

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 project, которые могут быть полезны.
alt text

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top