Pergunta

É possível suprimir primeiros supressions oportunidade no Visual Studio (C # depurador) para linhas específicas de código?

Eu quero usar exceções de primeira chance no depurador, mas há cerca de 50 exceções de primeira chance que eu preciso passar por cada sessão de depuração antes de eu chegar ao código interessante.

Atualmente, eu desligar exceções de primeira chance e depois manualmente ativá-los, mas isso é um aborrecimento e um dissipador de tempo.

Foi útil?

Solução

DebuggerNonUserCodeAttribute Class

A partir de .NET 2.0, se você marcar um método com o [ DebuggerNonUserCode /] atributo, o depurador irá ignorar exceções de primeira chance na mesma.

Citação de ligação MSDN (ênfase é minha):

membros que não fazem parte do código especificamente criado pelo usuário lata complicam a experiência de depuração . Este atributo suprime a exibição desses tipos adjuntos e membros em a janela depurador e automaticamente passos através , ao invés de em, desenhador fornecido código.

Não há comportamento de tempo de execução para além de depuração, associado a este atributo.

No entanto, se você tem apenas um método com certas linhas previstas para inclusão no mecanismo de manipulação de exceção primeira oportunidade do Visual Studio, e outras linhas a serem excluídos, que provavelmente não é uma solução a este nível de granularidade. Você sempre pode refatorar um método grande em vários métodos e usar o atributo em alguns queridos.


Informação adicional ...

Exemplo de uso de este artigo

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;
    }
}
mostra

o artigo relacionados com opções de projeto VS que podem ser úteis.
text alt

Outras dicas

Isso está acontecendo porque você está mis-usando exceções. Obtendo 50 antes de chegar ao "código interessante" não é um bom sinal. Não há nenhuma maneira no Visual Studio para ignorá-los em algum código, porque não é projetado para encorajar o que você está fazendo.

Dito isto, o que eu faria seria para desligar capturar exceções de primeira chance no depurador, explicitamente try/catch a exceção você quer pegar e colocar em um Debugger.Break() quando você pegou ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top