Caller Information: Debug sem Visual Studio - Revista .net Magazine 100

Neste artigo veremos um conjunto de classes chamado Caller Information que é utilizado para obter informações sobre o código que está sendo executado.

De que se trata o artigo

Neste artigo veremos um conjunto de classes chamado Caller Information que é utilizado para obter informações sobre o código que está sendo executado. Dentre as informações disponibilizadas pela Caller Information está o nome do método que fez a chamada, o nome do seu arquivo no projeto e a linha de código.

Em que situação o tema é útil

O Caller Information é utilizado no cenário em que se deseja rastrear a execução do programa e não se dispõe do Visual Studio instalado, por exemplo, em um ambiente de produção. Desta forma, é possível ter detalhes sobre a execução do programa, que serão úteis na resolução de problemas.

Debug sem Visual Studio

No .Net Framework 4.5 e o C# 5.0 foi acrescentado um conjunto de classes chamado Caller Information cujo objetivo é obter informações durante o runtime, sem a necessidade de utilizar ferramentas externas ou uso de breakpoint, como por exemplo, o Visual Studio.

As classes que compõem a Caller Infomation são: CallerMemberNameAtributte, CallerFilePathAttribute e CallerLineNumberAttribute e estão localizadas na biblioteca System.Runtime.CompilerServices. A seguir será descrito cada uma delas.

1. CallerMemberNameAttribute: Armazena o nome do método que fez a chamada para o método no qual este objeto está sendo usado como argumento.

2. CallerFilePathAttribute: Retorna o caminho completo do arquivo correspondente a classe onde o método que fez o chamado para o método atual está localizado.

3. CallerLineNumberAttribute: Armazena a linha de código do método que fez o chamado ao método atual dentro do código.

Estes elementos devem ser usados como atributos e argumentos opcionais de métodos onde se deseja recuperar estes dados. Deve-se obrigatoriamente (como ocorre em argumentos opcionais) passar valores default para estes parâmetros, conforme exposto na Listagem 1.

Listagem 1. Exemplo de utilização de CallerMemberName, CallerFilePath e CallerLineNumber

1 private Dictionary<string, int> Sort(Dictionary<string, int> dic, 2 [CallerMemberName] string memberName = "", 3 [CallerFilePath] string sourceFilePath = "", 4 [CallerLineNumber] int lineNumber = 0) 5 { 6 7 }

Embora no exemplo (e no projeto desenvolvido mais à frente) tenham sido usados todos os atributos, você não precisa usar todos ao mesmo tempo. Além disto, é possível também passar valores na chamada do método.

Se forem omitidos valores na chamada do método, estes irão capturar o nome do método, o nome do arquivo e a linha para o método atual, caso contrário, os valores usados são os que você informar nestes atributos.

Tanto a documentação como os exemplos existentes para este recurso ainda são poucos, uma vez que não foi feito ainda oficialmente o lançamento da nova versão do Visual Studio, logo, pode ser que haja mudanças." [...] continue lendo...

Artigos relacionados