The namespace System.Diagnostics provides a set of attributes and classes to interact with the system process, events managers, performance counts, etc. This namespace can help us too in debugging job.
Let’s review the useful actions inside of System.Diagnostics namespace.
DebuggerDisplay Attribute
DebuggerDisplay attribute marca el formato string format en la ventana del depurador de Visual Studio en: clases, propiedades o campos.
Para esta misma tarea es conocida por todos la sobrecarga del método ToString , pero usar el atributo DebbugerDisplay es una mejor elección, ya que no modifica la estructura de los datos y solo interactúa con la ventana de debug de Visual Studio.
Realizar la sobrecarga del método ToString, para este propósito, puede plantear una serie de problemas accarreados por las llamadas automáticas del CLR a este método, como en los bindings de WPF.
Realizar la sobrecarga del método ToString, para este propósito, puede plantear una serie de problemas accarreados por las llamadas automáticas del CLR a este método, como en los bindings de WPF.
Este atributo es compatible con delegates, properties, fields y assamblies.
Ejemplo:
[System.Diagnostics.DebuggerDisplay("{ID} - {Model}- {Manufacturer} - {ProductionDate}")] public class Car { public int ID { get; set; } public string Model { get; set; } public string Manufacturer { get; set; } public DateTime ProductionDate { get; set; } }
DebuggerHidden Attribute
El atributo DebuggerHidden impide al compilador parar en constructores, métodos, propiedades y indexadores.
De primeras esto no parece demasiado útil, pero en la práctica puede ahorrarnos tiempo y unas cuantas pulsaciones menos a la tecla F11 .
Ejemplo:
[System.Diagnostics.DebuggerHidden] public static List<Car> GetData() { var result = new List<Car>() { new Car{ ID = 1, Manufacturer = "Ford", Model = "Mustang", ProductionDate = DateTime.Today }, new Car{ ID = 2, Manufacturer = "Nissan", Model = "Micra" , ProductionDate = DateTime.Today } }; return result; }
Debugger.Launch
En ocasiones no tenemos posiblidad de pododer debugear el código de una librería, un servicio, o un componente, ya que no hay forma de adjuntarlo a nuestra solución. El método Debugger.Launch() , nos ofrece esa ventaja, ya que cuando la ejecución del código llega a su linea, esta lanza un ventana de Debug de Visual Studio, proponiendonos la posibilidad de depurar el código.
Cuando ejecutamos la línea Systen.Diagnostics.Debbuger.Launch(), se abrirá MessageBox dándonos a elegir las opciones de instancia de debug de Visual Studio :
En esta ventana podremos elegir entre crear una nueva instancia de las versiones de Visual Studio que tengamos instaladas en la máquina, o reutilizar una de las que ya tengamos abierta.
Y ya podremos debugear el código:
Conditional Attribute
El atributo Conditional, permite indicar una condición a métodos, para que el compilador ejecute o no ejecute su contenido.
Lo podemos utilizar con sentencias de precompilación como DEBUG.
static void Main(string[] args) { DebugMethod(); Console.Read(); } [System.Diagnostics.Conditional("DEBUG")] public static void DebugMethod() { Console.WriteLine("Execute Debug Method"); }
Como se puede apreciar, el método solo se ejecuta si estamos en DEBUG.
No existe ninguna condición para RELEASE, pero este atributo nos ofrece la potencia de utilizar directivas DEFINE.
No existe ninguna condición para RELEASE, pero este atributo nos ofrece la potencia de utilizar directivas DEFINE.
Las directivas DEFINE son otra de las opciones de System.Diagnostics.Conditional:
using System; namespace SystemDiagnosticsUsefulActions { class Program { static void Main(string[] args) { ReleaseMethod(); Console.Read(); } [System.Diagnostics.Conditional("RELEASE_MODE")] public static void ReleaseMethod() { Console.WriteLine("Execute Release Method"); } } }
Estos son algunos de las acciones útilies de System.Diagnostics. Pueden llegar a ser bastante prácticas, espero que lo sean para todos vosotros.
No hay comentarios :
Publicar un comentario