Подавлять исключения первого шанса
-
09-09-2019 - |
Вопрос
Возможно ли подавить первые случайные подавления в 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, которые могут быть полезны.
Другие советы
Это происходит из-за того, что вы неправильно используете исключения.Получение 50 до того, как вы перейдете к "интересному коду", не является хорошим знаком.В Visual Studio нет способа пропустить их в каком-либо коде, потому что он не предназначен для поощрения того, что вы делаете.
Тем не менее, что бы я сделал, так это явно отключил отлов исключений первой вероятности в отладчике try/catch
исключение, которое вы действительно хотите перехватить и поместить в Debugger.Break()
когда вы поймаете это.