Saltar al contenido

“depurando” tu aplicación en tiempo de ejecución (parte 1/2)

18 octubre, 2011

Muchas veces tras terminar nuestro proyecto debemos verificar que esté funcionando de manera correcta, bien sea en ambiente de pruebas o en algunos casos en ambiente de producción y a diferencia de tu ambiente de desarrollo no cuentas con un IDE para depurar tu app (aparte que se vería muy mal presentar una aplicación en un ambiente de producción corriendo en un IDE) así que veremos una téncica que particularmente utilizo para depurar las aplicaciones que realizo.

Emulando la compilación condicionada.

Si ya llevas cierto tiempo con visual studio (en cualquiera de sus versiones) has visto que en la parte superior hay una lista de selección con las opciones “debug” y “release”, estos sirven para seleccionar el ambiente en el que se va a compilar tu código (por eso cuando vas a buscar los ejecutables están repartidos en sendas carpetas “debug” y “release”). La compilación condicionada permite que se creen “objetos” de depuración (a los que puedes acceder mediante llamados a los métodos de la clase System.diagnostics.Debug ) cuando se procesa el ejecutable en modo de depuración (debug), labor que facilita mucho evaluar el proyecto en la etapa de desarrollo. Pero como dije en la introducción en los ambientes de prueba y/o producción lo mas probable es que no contemos con un IDE por lo que usaremos ciertas características para emular la compilación condicionada.

1. Creando la aplicación.

Nuestra aplicación de pruebas será una aplicación winforms muy sencilla, el código de diseñador es:

namespace HolaMundoDebug
{
    partial class Form1
    {
        /// <summary>
        /// Variable del diseñador requerida.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Limpiar los recursos que se estén utilizando.
        /// </summary>
        /// <param name="disposing">true si los recursos administrados se deben eliminar; false en caso contrario, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Código generado por el Diseñador de Windows Forms

        /// <summary>
        /// Método necesario para admitir el Diseñador. No se puede modificar
        /// el contenido del método con el editor de código.
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(95, 105);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            this.button1.MouseLeave += new System.EventHandler(this.Button1_Mouseleave);
            //
            // label1
            //
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(92, 52);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(35, 13);
            this.label1.TabIndex = 1;
            this.label1.Text = "label1";
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Label label1;
    }
}

Y el código de los comportamientos será:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace HolaMundoDebug
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "hola mundo";
        }

        private void Button1_Mouseleave(object sender, EventArgs e)
        {
            label1.Text = "nada";
        }
    }
}

2. Crear una clave en el app.config

¿app.config? Quizás se te haga un poco extraño si eres novato, pero es un archivo bastante común, en las aplicaciones comerciales, este archivo xml permite que se puedan cambiar los parámetros de configuración en tiempo de ejecución.

en primer lugar vamos a mostrar como se crea un archivo app.config dentro de tu solución:

Luego de crearlo debes modificarlo para que quede de la siguiente forma:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="DEBUG" value="True"/>
  </appSettings>
</configuration>

Al hacer eso haz creado una llave que se llama “DEBUG” y le haz puesto como valor “true”

3. cargar el valor de la clave en el app.config en la aplicación

Ahora queda un paso muy sencillo que es cargar el valor que tiene  la clave DEBUG en una variable dentro de la aplicación que estás construyendo para hacer esto debes,  en primer lugar crear una variable de tipo booleana llamada _DEBUG y luego modificarel código del constructor de tu forma (para mi caso es form1.cs) de tal forma que quede así:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;

namespace HolaMundoDebug
{
    public partial class Form1 : Form
    {
        private Boolean _DEBUG;
        public Form1()
        {
            InitializeComponent();
            //esta línea convierte el valor de tu clave DEBUG, en un valor booleano
            _DEBUG = Convert.ToBoolean(ConfigurationManager.AppSettings["DEBUG"]);

            // ahora esta línea le agrega al título de la ventana el texto "(debug)" en caso que estés en modo de depuración.
            if (_DEBUG)
                this.Text += " (debug)";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "hola mundo";
        }

        private void Button1_Mouseleave(object sender, EventArgs e)
        {
            label1.Text = "nada";
        }
    }
}

Hasta aquí va la primera parte de este tutorial, espero que les sea de utilidad y cualquier duda, con gusto la atenderé en los comentarios del post.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: