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