8.- manejo de errores y excepciones

51
Manejo de errores y excepciones Índice Descripción………………………………………….……..1 Lección: Tipos de errores………………….……….2 Lección: Uso del depurador………………………10 Lección: Gestión de excepciones……………..38

Upload: estefano-castillo

Post on 22-Nov-2015

24 views

Category:

Documents


2 download

TRANSCRIPT

  • Manejo de errores y excepciones

    ndice

    Descripcin...1

    Leccin: Tipos de errores..2

    Leccin: Uso del depurador10

    Leccin: Gestin de excepciones..38

  • Manejo de errores y excepciones 1

    Descripcin

    Tipos de errores

    Uso del depurador

    Manejo de excepcionesUso de Visual

    Studio .NET

    Acceso A datos

    Escribir Cdigo

    Crear Interfaz

    Depurare Implantar

    Introduccin A medida que los programas son ms grandes y ms complejos, es inevitable que se produzcan un determinado nmero de errores. Incluso la programacin ms cuidadosa puede producir errores involuntarios, tambin denominados bugs. El proceso de encontrar y eliminar estos errores se denomina depuracin (debugging).

    En este mdulo, estudiaremos los tipos de errores que pueden ocurrir en un programa y cmo utilizar el depurador de Microsoft Visual Studio .NET, las diversas ventanas de depuracin y la gestin estructurada de excepciones para ayudar a diagnosticar, corregir y realizar el tratamiento de errores.

    Objetivos En este mdulo, aprenderemos a:

    Definir y ver ejemplos de errores de sintaxis, tiempo de ejecucin y lgica. Depurar cdigo utilizando el depurador de Visual Studio .NET. Implementar en nuestra aplicacin la gestin estructurada de excepciones.

  • 2 Manejo de errores y excepciones

    Leccin: Tipos de errores

    Qu son los errores de sintaxis?

    Que son los errores de tiempo de ejecucin?

    Que son los errores de lgica?

    Introduccin Los errores de programacin normalmente se dividen en tres categoras: errores de sintaxis, errores de tiempo de ejecucin y errores de lgica. Utilizaremos diferentes mtodos y herramientas para encontrar y solucionar cada tipo de error.

    Estructura de la leccin Esta leccin incluye los siguientes temas y actividades:

    Qu son los errores de sintaxis? Qu son los errores de tiempo de ejecucin? Qu son los errores de lgica? Demostracin: Tipos de errores

    Objetivo de la leccin En esta leccin, aprenderemos a describir la diferencia entre errores de sintaxis,

    de tiempo de ejecucin y de lgica.

  • Manejo de errores y excepciones 3

    Qu son los errores de sintaxis?

    Visualizar errores en la Lista de tareas:

    Error de sintaxisError de sintaxisError de sintaxisError de sintaxis

    Introduccin El tipo ms obvio de error es un error de sintaxis, que tiene lugar cuando escribimos cdigo de un modo no permitido por las reglas del lenguaje. Algunos ejemplos ms habituales incluyen una palabra clave mal escrita, la omisin de puntuacin requerida, o una construccin incorrecta (como una instruccin For sin la correspondiente instruccin Next, o la palabra clave If en una lnea sin un operador condicional).

    Encontrar errores de sintaxis

    Visual Basic .NET muestra los errores de sintaxis mientras escribimos cada instruccin del cdigo de nuestra aplicacin. La parte de cdigo que contiene el error aparece con un subrayado en forma de diente de sierra. Cuando colocamos el cursor del ratn sobre el cdigo subrayado, aparece un consejo con una breve descripcin del error junto al cursor.

    Los errores de sintaxis son recogidos por el compilador, el cual muestra un mensaje de error informndonos del problema. Si ignoramos los errores de sintaxis mientras escribimos el cdigo, podemos visualizar y abordarlos en cualquier momento en la ventana de la Lista de tareas. Si intentamos generar nuestra aplicacin sin corregir los errores de sintaxis, la ventana de la Lista de tareas mostrar todos los errores incluidos en la lista.

  • 4 Manejo de errores y excepciones

    Visualizar errores en la ventana Lista de tareas

    La ventana Lista de tareas incluye una descripcin del error, la ruta al archivo en el que se ha producido el error y el nmero de la lnea del cdigo que contiene el error. La descripcin del error es la misma informacin que obtenemos si posicionamos el cursor del ratn sobre la parte subrayada del cdigo en el Editor de cdigo.

    Podemos editar los errores haciendo doble clic en la entrada correspondiente en la Lista de tareas. El punto de insercin se posiciona en el archivo correcto y la lnea exacta donde se encuentra el error, de modo que podemos cambiar nuestro cdigo. En cuanto finalicemos los cambios y salgamos de la lnea modificada, se actualizarn las entradas de la ventana Lista de tareas.

    En la ventana Lista de tareas, tambin podemos ver tareas que hemos creado comentando nuestro cdigo con la frase TODO.

    Visualizar errores en la ventana de Resultados

    Tambin podemos utilizar la ventana Resultados para ver los errores de generacin. Esta ventana muestra una lista de avisos, errores y el estado de generacin mientras Visual Studio .NET est generando la aplicacin. Al final del proceso de generacin, proporciona un resumen, incluyendo la ubicacin de los errores de sintaxis (nmero de lnea y archivo) y una breve descripcin de los problemas.

  • Manejo de errores y excepciones 5

    Qu son los errores de tiempo de ejecucin?

    Speed = Miles/Hours

    ' If Hours = 0, the statement is syntactically correct, but the division is an invalid operation

    Speed = Miles/Hours

    ' If Hours = 0, the statement is syntactically correct, but the division is an invalid operation

    Introduccin Los errores de tiempo de ejecucin son errores que ocurren cuando una instruccin intenta realizar una operacin que es imposible llevar a cabo; por ejemplo, referenciar un objeto inaccesible. Los errores de tiempo de ejecucin apareen durante la ejecucin del cdigo.

    Ejemplo de un error en tempo de ejecucin

    Con frecuencia, los errores de tiempo de ejecucin son el resultado de acciones imprevistas. Por ejemplo, un usuario podra olvidar insertar un disquete en una unidad, o seleccionar un archivo de entrada de datos no vlido. Un error habitual en tiempo de ejecucin es intentar dividir por cero. Pensemos en el siguiente cdigo:

    Velocidad = Kilmetros / Horas

    Si la variable Horas es igual a cero, la divisin es una operacin no vlida, aunque la instruccin sea sintcticamente correcta.

    Consecuencias de los errores de tiempo de ejecucin

    El compilador no captura errores de tiempo de ejecucin. Los compiladores nicamente capturan errores en la estructura del cdigo que escribimos, no errores en la funcionalidad.

    Si se produce un error de tiempo de ejecucin no gestionado mientras nuestro programa se est ejecutando como una generacin en modo debug, aparecer un mensaje de error que nos permitir entrar en modo de interrupcin y abordar el problema. Si se produce un error de tiempo de ejecucin cuando nuestra aplicacin se est ejecutando como una generacin en modo release, puede hacer que nuestro programa se detenga respondiendo con o sin un mensaje de error. En trminos coloquiales, puede hacer que su programa falle o se cuelgue.

    Podemos utilizar las herramientas de depuracin de Visual Studio .NET para aislar errores y escribir cdigo de control de errores para controlar las condiciones que podran generar errores de tiempo de ejecucin. Para controlar los errores de tiempo de ejecucin, tambin podemos escribir controladores de excepciones que atrapen los errores y lleven a cabo una accin prescrita, como corregir el problema, indicando al usuario que realice una accin, o guardando

  • 6 Manejo de errores y excepciones

    datos antes de finalizar el programa. Otro modo de minimizar errores de tiempo de ejecucin es validar todas las formas de introduccin de datos del usuario.

  • Manejo de errores y excepciones 7

    Qu son los errores de lgica?

    Definicin: Un error que hace que una aplicacin produzca resultados incorrectos

    z Puede no generar un mensaje de error

    z Se encuentra probando la aplicacin y analizando los resultados

    Dim x As Integer = 2

    Do While x < 10

    ' Code statements

    x -= 1

    Loop

    Dim x As Integer = 2

    Do While x < 10

    ' Code statements

    x -= 1

    Loop

    Introduccin Los errores lgicos son errores que se producen cuando una aplicacin no se comporta del modo previsto. Estos errores son especialmente difciles de encontrar porque es posible que no generen un mensaje de error. Una aplicacin puede tener un cdigo vlido sintcticamente y ejecutarse sin realizar ninguna operacin no vlida, pero producir resultados incorrectos.

    Ejemplo de error lgico El siguiente cdigo contiene un error lgico que en algn momento provocar un error de tiempo de ejecucin.

    Dim x As Integer = 2 Do While x < 10 ' Code statements x -= 1 Loop

    En este cdigo, el bucle While se ejecuta mientras el valor de x es menor de 10. Dentro del bucle, la instruccin x -= 1 contiene un error lgico, ya que el valor de inicio de x es 2, y el valor se disminuye en 1 cada vez que el bucle se ejecuta. La condicin x < 10 ser siempre verdadera, lo cual produce un bucle infinito. Se producir un error de tiempo de ejecucin cuando el valor de x exceda el valor que puede almacenarse en un Integer.

    Encontrar y solucionar errores lgicos

    El nico modo de verificar que una aplicacin funciona correctamente es probarla y analizar los resultados. Como parte del proceso de depuracin, podemos utilizar las herramientas de depuracin de Visual Studio .NET para aislar y corregir errores lgicos de nuestro cdigo.

  • 8 Manejo de errores y excepciones

    Demostracin: Tipos de errores

    En esta demostracin, estudiaremos los siguientes tipos de errores, y ver un ejemplo de cada error en el entorno de Visual Studio .NET :

    z Error de sintaxis

    z Error de tiempo de ejecucin

    z Error de lgica

    En esta demostracin, estudiaremos distintos tipos de errores.

    Crear un error de sintaxis 1. Iniciar Visual Studio .NET. 2. Crear una aplicacin basada en Microsoft Windows. 3. Agregar un control Button a Form1. 4. Crear un controlador de eventos para el evento Button1_Click. El

    controlador de eventos mostrar un cuadro de mensaje cuando el usuario hacer clic en el botn.

    5. En la lista de parmetros de la funcin MessageBox, utilizar el carcter de continuacin de lnea para romper incorrectamente el cdigo de los parmetros del cuadro de mensaje. Nuestro cdigo debera ser similar al siguiente: MessageBox.Show("Compile-time Error", MessageBox _ Buttons.OK)

    6. Intentar la generacin de la aplicacin. Se crear un error de sintaxis. 7. Solucionar el problema eliminando el carcter de continuacin de lnea, y

    generar de nuevo la aplicacin.

  • Manejo de errores y excepciones 9

    Crear un error de tiempo de ejecucin

    1. Modificar el controlador de eventos Button1_Click. Sustituir el cdigo por el cdigo siguiente, el cual generar un error de tiempo de ejecucin al intentar dividir por cero. Dim i, j As Integer j = 0 i = 4 / j

    2. Generar y ejecutar la aplicacin. 3. Hacer clic en Button1. Se generar un error de tiempo de ejecucin. 4. En el cuadro de dilogo Microsoft Development Environment, hacer clic

    en Continuar para cerrar la aplicacin.

    Crear un error lgico 1. Aadir dos controles TextBox a Form1. 2. Eliminar el cdigo existente en el controlador de eventos Button1_Click. 3. Aadir el siguiente cdigo, que lee dos valores de los cuadros de texto,

    aade los valores y muestra el resultado en un cuadro de mensaje. MessageBox.Show(TextBox1.Text + TextBox2.Text)

    4. Generar y ejecutar la aplicacin. 5. Escribir dos nmeros en los cuadros de texto. 6. Hacer clic en Button1. El resultado es la concatenacin de los dos nmeros,

    que no es el resultado previsto. ste es un error lgico. 7. Cerrar la aplicacin y cambiar el cdigo para utilizar la funcin CInt.

    Nuestro cdigo debera ser similar al siguiente: MessageBox.Show(CInt(TextBox1.Text) + CInt(TextBox2.Text))

    8. Generar y ejecutar la aplicacin. 9. Escribir dos valores enteros en los cuadros de texto y hacer clic en Button1. 10. Cerrar la aplicacin.

  • 10 Manejo de errores y excepciones

    Leccin: Uso del depurador

    Qu es el Modo Break?

    Cmo utilizar Breakpoints

    Cmo modificar Breakpoints

    La barra de herramientas de depuracin

    How to Step Through Code

    Cmo utilizar las ventanas de depuracin

    Cmo utilizar la ventana Command

    Introduccin Las herramientas de depuracin resultan de ayuda en el diagnstico de errores del programa al ayudarnos a examinar el flujo de nuestro programa. Podemos utilizar herramientas de depuracin para detener nuestro programa en ubicaciones establecidas durante la ejecucin del cdigo, examinar cambios en valores de variables y propiedades, y movernos paso a paso por partes del cdigo.

    Estructura de la leccin Esta leccin incluye los siguientes temas y actividades:

    Demostracin: cmo depurar una aplicacin Qu es el modo de interrupcin? Cmo utilizar puntos de interrupcin Cmo modificar puntos de interrupcin La barra de herramientas Depuracin Recorrer paso a paso el cdigo Demostracin: cmo utilizar las ventanas de depuracin Cmo utilizar las ventanas de depuracin Cmo utilizar la Ventana de comandos Prctica: cdigo de depuracin

    Objetivos de la leccin En esta leccin, aprenderemos a:

    Establecer, eliminar y modificar puntos de interrupcin. Recorrer el cdigo utilizando los comandos Step y la sintaxis Ejecutar

    hasta el Cursor. Utilizar las siguientes ventanas para inspeccionar nuestro programa: la

    ventana Automtico, la ventana Pila de llamadas, la ventana Comandos, la ventana Variables locales y la ventana Inspeccin.

  • Manejo de errores y excepciones 11

    Demostracin: Cmo depurar una aplicacin

    En esta demostracin, aprenderemos cmo depurar una aplicacin utilizando breakpoints, stepping through cdigo por lneas de y utilizando la ventan Watch para examinar variables en cdigo.

    En esta demostracin, aprenderemos cmo depurar una aplicacin utilizando puntos de interrupcin, recorrer el cdigo lnea por lnea y utilizando la ventana Inspeccin para examinar variables en el cdigo.

    Iniciar Visual Studio .NET y cargar el proyecto de la demostracin.

    1. Hacer clic en Inicio, seleccionar Todos los programas, seleccionar Microsoft Visual Studio .NET, y hacer clic en Microsoft Visual Studio .NET.

    2. En la Pgina de inicio, en el panel de Inicio, hacer clic en Abrir proyecto. 3. En el cuadro de dilogo Abrir proyecto, ir a la carpeta

    DebuggingApplication, y hacer doble clic en DebuggingApplication.sln. Esta carpeta se puede encontrar dentro del fichero demos08.zip.

  • 12 Manejo de errores y excepciones

    Ejecutar la aplicacin 4. En la barra de herramientas, hacer clic en el botn Iniciar. 5. En la ventana Form1, hacer clic en Button1.

    Se producir una excepcin no controlada de tipo System.IndexOutOfRangeException.

    6. En el cuadro de dilogo Microsoft Development Environment, hacer clic en Break.

    7. Mover el cursor del ratn sobre index en la lnea de cdigo seleccionada. Observar que la sugerencia muestra 5 como valor de la variable index. La variable index se incrementa en el bucle For desde 0 al resultado de names.GetLength(0). El problema es que el mtodo GetLength devuelve el nmero de elementos en la dimensin de una matriz. Debido a que las matrices se numeran desde cero, el valor devuelto por el mtodo GetLength necesita reducirse en 1 para el bucle ForNext.

    Corregir el cdigo y probar la aplicacin de nuevo 1. En el men Depurar, hacer clic en Detener depuracin. 2. En el Editor de cdigo de Form1.vb, aadir el cdigo 1 al final de la

    siguiente lnea: For index = 0 to names.GetLength(0)

    3. En la barra de herramientas, hacer clic en el botn Iniciar . 4. En el cuadro de dilogo Form1, hacer clic en Button1.

    Observar que el cuadro de mensaje nos informa de que el nombre ms largo guardado en la matriz es Tina. Esto no es correcto.

    5. En el cuadro de mensaje, hacer clic en OK. 6. Cerrar Form1.

    Utilizar un punto de interrupcin para depurar la aplicacin 1. En el Editor de cdigo de Form1.vb, hacer clic en el margen para aadir un

    punto de interrupcin a la siguiente lnea de cdigo: For index = 0 To names.GetLength(0) 1

    2. En la barra de herramientas, hacer clic en el botn Iniciar . 3. En el cuadro de dilogo Form1, hacer clic en Button1.

    Observar que la ejecucin se detiene en la lnea donde ha establecido el punto de interrupcin.

    4. En la siguiente lnea de cdigo, hacer clic con el botn derecho en index y, a continuacin, hacer clic en Agregar inspeccin. For index = 0 to names.GetLength(0) -1

    Aparecer una ventana Inspeccin debajo del Editor de cdigo. El valor de la variable index se muestra en esta ventana Inspeccin.

    5. Hacer clic con el botn derecho en la variable maxLen, y hacer clic en Agregar inspeccin.

  • Manejo de errores y excepciones 13

    6. Hacer clic con el botn derecho en la variable longestName y, a

    continuacin, hacer clic en Agregar inspeccin. 7. En la siguiente lnea de cdigo, seleccionar names(index), hacer clic con el

    botn derecho en el rea seleccionada y, a continuacin, hacer clic en Agregar inspeccin. If names(index).Length > maxLen then

    8. Pulsar F8.

    La flecha amarilla indica la lnea de cdigo que se ejecutar a continuacin. 9. Pulsar F8.

    Debido a que la longitud del nombre Brandon es mayor que el valor actual de maxLen, la ejecucin contina en la siguiente lnea.

    10. Pulsar F8. Observar que el nombre ms largo (longestName) de la ventana Inspeccin ahora contiene Brandon.

    11. Pulsar F8. 12. Pulsar F8.

    Observar que index se ha incrementado en 1. Sin embargo, la siguiente lnea que se ejecuta es la instruccin If y no el bucle For. Esto se debe a que el bucle For ya se est ejecutando.

    13. Pulsar F8. Aunque Bob es un nombre ms corto que Brandon, la ejecucin contina en la siguiente lnea. Esto se debe a que la variable maxLen no se ha actualizado y todava contiene 0. ste es el error del cdigo.

    14. Detener la aplicacin pulsando MAYSCULAS+F5. 15. Despus de la instruccin de cdigo

    longestName = names(index)

    aadir la siguiente lnea de cdigo: maxLen = names(index).Length

    16. Hacer clic en el marcador de punto de interrupcin para eliminar el punto de

    interrupcin.

    17. En la barra de herramientas, hacer clic en el botn Iniciar . 18. En el cuadro de dilogo Form1, hacer clic en Button1.

    Ahora, el cuadro de mensaje informa correctamente de que el nombre ms largo es Brandon.

    19. En el cuadro de mensaje, hacer clic en OK. 20. Cerrar Form1. 21. En la barra de herramientas, hacer clic en Guardar todo.

    Cerrar Visual Studio .NET En el men Archivo, hacer clic en Salir.

  • 14 Manejo de errores y excepciones

    Qu es el modo de interrupcin?

    Detiene la operacin de una aplicacin

    En modo break, podemos:

    z Step through nuestro cdigo lnea por lnea

    z Determinar los procedimientos activos que se han invocado

    z Observar los valores de las variables, propiedades y expresiones

    z Utilizar ventanas de depuracin para cambiar los valores de variables y propiedades

    z Cambiar el flujo del programa

    z Ejecutar instrucciones de cdigo

    Introduccin Cuando desarrollamos una aplicacin en Visual Basic .NET, trabajamos principalmente en dos modos: modo de diseo y modo de ejecucin. En el modo de diseo, creamos y modificamos cdigo y podemos abordar errores de sintaxis, pero no podemos realizar pruebas para detectar errores de tiempo de ejecucin y de lgica. En el modo de ejecucin, podemos comprobar la ejecucin del programa y realizar pruebas para detectar errores de tiempo de ejecucin y de lgica, pero no podemos modificar el cdigo. Un tercer modo (el modo de interrupcin) detiene la operacin de una aplicacin y ofrece una imagen de su condicin en cualquier momento. Entrar en el modo de interrupcin no finaliza la ejecucin del programa. La ejecucin puede reanudarse en cualquier momento.

    nicamente podemos entrar modo de interrupcin mientras estamos ejecutando una versin de debug de la aplicacin. No podemos entrar modo de interrupcin cuando estamos ejecutando una versin release de una aplicacin.

    Entrar en modo de interrupcin

    Visual Basic entra en modo de interrupcin cuando:

    Encuentra un punto de interrupcin establecido en el cdigo. Encuentra una instruccin Stop en el cdigo. Se dispara una expresin de inspeccin que hayamos incluido. Pulsamos las teclas CTRL+BREAK mientras estamos ejecutando una

    versin debug de nuestro programa. Hacemos clic en el botn Interrumpir todos de la barra de herramientas

    Depurar mientras estamos ejecutando una versin debug de nuestro programa.

    Una instruccin de una lnea de cdigo genera un error de tiempo de ejecucin no atrapado y hacemos clic en Depurar en el cuadro de dilogo que aparece.

    Una instruccin Debug.Assert se evala en False.

  • Manejo de errores y excepciones 15

    Estudiaremos ms sobre la instruccin Debug.Assert ms adelante en esta

    unidad. Uso del modo de interrupcin

    Cuando estamos en modo de interrupcin, el texto [interrumpir] aparece en la barra de ttulo de Visual Studio. La siguiente imagen de pantalla muestra una aplicacin denominada DebuggingApplication en modo de interrupcin.

    Mientras estamos en modo de interrupcin, podemos:

    Recorrer nuestro cdigo lnea a lnea. Determinar los procedimientos activos que se han invocado. Observar los valores de variables, propiedades y expresiones. Utilizar las ventanas de depuracin para cambiar valores de variables y

    propiedades. Cambiar el flujo del programa. Ejecutar instrucciones de cdigo.

    Uso del mtodo Debug.Assert

    Podemos entrar condicionalmente en modo de interrupcin utilizando el mtodo Debug.Assert. Este mtodo utiliza una expresin booleana para determinar si se entra en modo de interrupcin. Se entra en el modo de interrupcin cuando la instruccin Debug.Assert se evala a False.

    Para emplear el mtodo Debug.Assert, utilizar la siguiente sintaxis:

    Debug.Assert booleanexpression

    En el siguiente cdigo, la instruccin Debug.Assert har que Visual Basic entre en modo de interrupcin cuando la variable Counter sea mayor o igual a cinco:

    Private Sub Count_Click( ) Dim Counter As Integer For Counter = 1 To 10 Debug.Assert Counter < 5 'Enter break mode when this statement evaluates to False Next End Sub

    Nota nicamente podemos utilizar Debug.Assert en una versin de debug de

  • 16 Manejo de errores y excepciones

    una aplicacin. Cuando el cdigo se compila utilizando una versin release, se omiten las invocaciones a mtodos de Debug.

  • Manejo de errores y excepciones 17

    Cmo utilizar puntos de interrupcin

    Un breakpoint es un marcador en nuestro cdigo que hace que Visual Basic detenga la ejecucin del cdigo en una lnea especfica

    No podemos colocar breakpoints en cdigo no ejecutable

    BreakpointsBreakpoints

    Introduccin Un punto de interrupcin es un marcador en nuestro cdigo que hace que Visual Basic detenga la ejecucin del cdigo en una lnea especfica. En lugar de recorrer nuestro cdigo lnea a lnea o instruccin a instruccin, podemos permitir que nuestro programa se ejecute hasta que encuentre un punto de interrupcin y empiece entonces la depuracin.

    Para detener nuestro programa en un lugar de nuestro cdigo donde sospechamos que existe un problema, establecemos un punto de interrupcin en ese lugar. Podemos establecer puntos de interrupcin en tiempo de diseo o durante una sesin de depuracin.

    Establecer un punto de interrupcin

    Existen varias formas de establecer un punto de interrupcin:

    Hacer clic en el margen izquierdo del Editor de cdigo en la lnea que contiene la instruccin donde deseamos que se detenga el depurador.

    Situar el cursor del ratn en la lnea donde deseamos que se detenga el depurador. Pulsar F9 para cambiar el punto de interrupcin a activo o inactivo.

    Hacer clic con el botn derecho en la lnea de cdigo y, a continuacin, hacer clic en Insertar punto de interrupcin en el men de acceso directo.

    Una vez establecido el punto de interrupcin, aparecer un smbolo circular (z) en el margen izquierdo de la lnea de cdigo en la que se ha establecido el punto de interrupcin, y la lnea de cdigo aparece resaltada en el mismo color que el punto de interrupcin.

    Cuando se llega al punto de interrupcin en tiempo de ejecucin, aparece un indicador de ejecucin en la lnea que se ejecuta a continuacin. Si lo deseamos,

  • 18 Manejo de errores y excepciones

    podemos mover este indicador a otra lnea. La siguiente ilustracin muestra el indicador de ejecucin.

    Eliminar un punto de interrupcin

    Existen varias formas de eliminar un punto de interrupcin:

    Hacer clic en el smbolo del punto de interrupcin (z) junto a la lnea que contiene el punto de interrupcin, en el margen izquierdo del Editor de cdigo.

    Situar el cursor en la lnea en la que se ha establecido el punto de interrupcin y, a continuacin, pulsar F9 para eliminar el punto de interrupcin.

    Hacer clic con el botn derecho en la lnea de cdigo en la que se ha establecido el punto de interrupcin y, a continuacin, hacer clic en Deshabilitar punto de interrupcin en el men de acceso directo.

    Para eliminar todos los puntos de interrupcin al mismo tiempo, hacer clic en Borrar todos los puntos de interrupcin en el men Depurar. Nota

    La ventana Puntos de interrupcin

    La ventana Puntos de interrupcin muestra una lista de todos los puntos de interrupcin establecidos actualmente en nuestro programa y sus propiedades. En la ventana Puntos de interrupcin, podemos establecer nuevos puntos de interrupcin, eliminar, habilitar o deshabilitar puntos de interrupcin, modificar las propiedades de un punto de interrupcin, o ir al cdigo fuente o desensamblar el cdigo correspondiente al punto de interrupcin.

    Abrir la ventana Puntos de interrupcin En el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en

    Puntos de interrupcin.

    La siguiente imagen de pantalla muestra la ventana Puntos de interrupcin.

    Si se desea obtener ms informacin sobre el uso de la ventana Puntos de interrupcin, consultar Uso de la ventana Puntos de interrupcin en la documentacin de Visual Studio .NET.

    Nota

  • Manejo de errores y excepciones 19

    Cmo modificar puntos de interrupcin

    Propiedad ConditionPropiedad Condition

    PropiedadHit Count

    PropiedadHit Count

    Introduccin Podemos establecer dos propiedades que modifiquen el comportamiento de un punto de interrupcin: la propiedad Condicin y la propiedad Recuento de visitas.

    Uso de la propiedad Condicin

    Podemos utilizar el cuadro de dilogo Propiedades del punto de interrupcin para establecer un punto de interrupcin condicional. Una condicin es una expresin que determina si el depurador entrar en modo de interrupcin cuando llegue al punto de interrupcin. Cuando el depurador llegue al punto de interrupcin, evaluar la condicin y cambiar a modo de interrupcin slo si sta se cumple.

    Establecer la propiedad Condicin Establecer la propiedad Condicin para un punto de interrupcin

    1. En el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en Puntos de interrupcin.

    2. Abrir el cuadro de dilogo Propiedades del punto de interrupcin haciendo clic en el punto de interrupcin adecuado de la ventana Puntos de interrupcin y hacer clic en Propiedades en la barra de herramientas de la ventana Puntos de interrupcin.

    3. En el cuadro de dilogo Propiedades del punto de interrupcin, hacer clic en Condicin.

    4. Escribir la expresin que desea que evale el depurador. 5. Especificar cmo debe satisfacerse la condicin escogiendo uno de los

    siguientes: a. Cuando la expresin es true. b. Cuando el valor de la expresin cambia (hacer clic en ha cambiado en

    el cuadro de dilogo Condicin de punto de interrupcin). Cuando establecemos una condicin de punto de interrupcin que evala si una expresin ha cambiado, el depurador no se detiene la primera vez que se llega al punto de interrupcin. La expresin se evala y se

  • 20 Manejo de errores y excepciones

    almacena un valor, pero este almacenamiento inicial no se considera un cambio en el valor.

    Ejemplo de uso de la propiedad Condicin

    Por ejemplo, supongamos que estamos depurando un programa financiero en el que no est permitido que el saldo de la cuenta sea menor que cero. Podramos establecer puntos de interrupcin en determinados lugares del cdigo y asignar la condicin accountBalance < 0 a cada uno.

    Cuando ejecutamos el programa, la ejecucin se interrumpir en los puntos de interrupcin slo cuando la variable accountBalance sea menor que cero. Podemos examinar el estado del programa y las variables en el primer lugar del punto de interrupcin, y continuar la ejecucin hasta el segundo lugar de punto de interrupcin, etc. La siguiente imagen de pantalla muestra cmo se establecera la propiedad Condicin del punto de interrupcin para el escenario anterior.

    Uso de la propiedad Recuento de visitas

    De modo predeterminado, el depurador detiene la ejecucin del cdigo cada vez que se llega a un punto de interrupcin. No obstante, algunos errores no aparecen la primera vez que nuestro programa ejecuta un bucle, invoca una funcin o accede a una variable. Por ello, es posible que deseemos detener la ejecucin slo cuando se haya llegado al punto de interrupcin un nmero especfico de veces. Este nmero se denomina recuento de visitas. Podemos utilizar la propiedad Recuento de visitas para especificar cuntas veces se alcanza el punto de interrupcin antes de que el depurador detenga su ejecucin.

    Establecer la propiedad Recuento de visitas Establecer la propiedad Recuento de visitas de un punto de

    interrupcin

    6. En el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en Puntos de interrupcin.

    7. Abrir el cuadro de dilogo Propiedades del punto de interrupcin seleccionando el punto de interrupcin adecuado en la ventana Puntos de interrupcin y haciendo clic en Propiedades en la barra de herramientas de la ventana Puntos de interrupcin.

    8. En el cuadro de dilogo Propiedades del punto de interrupcin, hacer clic en Recuento de visitas.

    9. En el cuadro de dilogo Recuento de visitas al punto de interrupcin, en el cuadro Cuando el punto de interrupcin se visita, hacer clic en el tipo de prueba de recuento de visitas que desea realizar. Las opciones disponibles son las siguientes: a. interrumpir siempre b. interrumpir cuando el recuento de visitas es igual a

  • Manejo de errores y excepciones 21

    c. interrumpir cuando el recuento de visitas es mltiplo de

    d. interrumpir cuando el recuento de visitas es mayor o igual a 10. Introduzca el valor del recuento de visitas adecuado y, a continuacin, hacer

    clic en Aceptar. Ejemplo de uso de la propiedad Recuento de visitas

    En el siguiente ejemplo, el recuento de visitas se ha establecido en 3. La ejecucin se detendr la tercera vez que se alcance el punto de interrupcin. Si ha establecido una propiedad Condicin, la ejecucin se detendr la tercera vez que se alcance el punto de interrupcin segn esa condicin.

  • 22 Manejo de errores y excepciones

    La barra de herramientas Depurar

    StartStart

    Break AllBreak All

    Stop Debugging

    Stop Debugging

    RestartRestart

    Show NextStatement

    Show NextStatement

    Step IntoStep Into Step OutStep Out

    Step OverStep Over

    BreakpointsBreakpoints

    HexadecimalDisplay

    HexadecimalDisplay

    Introduccin Despus de que la ejecucin de su programa se haya detenido cerca de un punto donde pensamos que existe un problema, podemos utilizar las herramientas de depuracin que proporciona Visual Basic para investigar el problema. La barra de herramientas Depurar ofrece un acceso rpido a varias de las caractersticas de depuracin ms utilizadas.

    La barra de herramientas Depurar

    Si la barra de herramientas Depurar no est visible, hacer clic con el botn derecho en cualquier barra de herramientas en modo de diseo o interrupcin y, a continuacin, hacer clic en Depurar. La siguiente tabla describe los botones de la barra de herramientas que utilizaremos con mayor frecuencia.

    Nombre del botn Acceso directo predeterminado

    Descripcin

    Iniciar/Continuar F5 Ejecuta la aplicacin desde el formulario de inicio (o Sub Main) especificado en

    la pestaa General del cuadro de dilogo Pginas de propiedades. En modo de interrupcin, el texto del la sugerencia del botn Iniciar cambia a Continuar.

    Interrumpir todos CTRL+ALT+BREAK

    Detiene la ejecucin de todos los programas que se ejecutarn bajo el depurador. Los programas no se cierran y podemos reanudar su ejecucin cuando deseemos.

    Detener depuracin Detiene la ejecucin del programa y regresa al modo de diseo.

    Paso a paso por instrucciones

    F8 Ejecuta la siguiente lnea de cdigo ejecutable, yendo paso a paso por cada una de las lneas de cdigo siguientes. Si el cdigo invoca otro procedimiento, Paso a paso por instrucciones se ejecuta paso a paso por cada lnea de ese procedimiento.

    Paso a paso por procedimientos

    MAYS+F8 Ejecuta la siguiente lnea de cdigo ejecutable, yendo paso a paso por cada una de las lneas de cdigo siguientes. Si el cdigo invoca otro procedimiento, ese procedimiento se ejecuta completamente antes de ir paso a paso por la siguiente lnea de cdigo del primer procedimiento.

    Paso a paso para salir CTRL+MAYS+F8 Ejecuta el resto del procedimiento actual y se interrumpe en la siguiente lnea del procedimiento de llamada.

    Puntos de interrupcin

    CTRL+B Abre la ventana Puntos de interrupcin.

  • Manejo de errores y excepciones 23

    Cmo recorrer el cdigo

    Step into o step over: ejecuta la lnea de cdigo siguiente. Si la lnea siguiente contiene una invocacin de procedimiento:

    z Step into: nicamente ejecuta la invocacin, y se detiene en la primera lnea de cdigo dentro del procedimiento

    z Step over: ejecuta el procedimiento, y se detiene en la primera lnea de cdigo fuera del procedimiento

    Step out: reanuda la ejecucin hasta que regresa el procedimiento y, a continuacin, se interrumpe en el punto de regreso del procedimiento de llamada

    Run To Cursor: el depurador ejecuta nuestra aplicacin hasta llegar al punto de insercin que hemos establecido

    Introduccin Uno de los procedimientos de depuracin ms habituales es recorrer paso a paso el cdigo, o ejecutar las lneas del cdigo una por una. El men Depurar proporciona tres comandos para recorrer paso a paso el cdigo: Paso a paso por instrucciones, Paso a paso por procedimientos y Paso a paso para salir. Adems, el comando Ejecutar hasta el cursor nos permite ejecutar nuestra aplicacin hasta que el depurador llega al punto de insercin que hemos establecido. Podremos ir paso a paso por nuestro cdigo desde ese punto.

    No podemos acceder a los comandos Step si nuestra aplicacin se est ejecutando. Los comandos Step nicamente son vlidos en modo de interrupcin o antes de iniciar la aplicacin.

    Nota

    Uso de Paso a paso por instrucciones y Paso a paso por procedimientos

    Tanto Paso a paso por instrucciones como Paso a paso por procedimientos ordenan al depurador que ejecute la siguiente lnea de cdigo. Estos comandos slo se diferencian en un aspecto: la forma en que controlan las invocaciones a procedimientos.

    Si la lnea contiene una invocacin a un procedimiento:

    Paso a paso por instrucciones nicamente ejecuta la invocacin, y se detiene en la primera lnea de cdigo dentro del procedimiento.

    Paso a paso por procedimientos ejecuta todo el procedimiento, y se detiene en la primera lnea de cdigo fuera del procedimiento.

    Utilizar Paso a paso por instrucciones si se desea ver la invocacin a procedimiento. Utilizar Paso a paso por procedimientos si se desea evitar ir paso a paso dentro de los procedimientos.

  • 24 Manejo de errores y excepciones

    Uso de Paso a paso para salir

    Utilizar Paso a paso para salir cuando nos encontremos dentro de la invocacin a un procedimiento y se desee regresar al procedimiento de llamada. Paso a paso para salir reanuda la ejecucin de cdigo hasta el retorno del procedimiento, y se interrumpe en el punto de retorno del procedimiento de llamada.

    Uso de Ejecutar hasta el cursor

    Podemos utilizar el comando Ejecutar hasta el cursor para ordenar al depurador que ejecute nuestra aplicacin hasta alcanzar el punto de insercin que hemos establecido haciendo clic en el Editor de cdigo con el ratn. El comando Ejecutar hasta el cursor no est disponible en el men Depurar. Para ejecutar este comando, hacer clic con el botn derecho en la ventana fuente y, a continuacin, hacer clic en Ejecutar hasta el cursor en el men de acceso directo.

    Iniciar la accin de ir paso a paso por el cdigo

    Para iniciar la depuracin de una aplicacin, podemos utilizar Iniciar, Paso a paso por instrucciones, Paso a paso por procedimientos o Ejecutar hasta el cursor.

    Si hacemos clic en Iniciar, nuestra aplicacin se iniciar y se ejecutar hasta llegar a un punto de interrupcin. Podemos interrumpir la ejecucin en cualquier momento para examinar valores, modificar variables, y examinar el estado de nuestro programa.

    Si hacemos clic en Paso a paso por instrucciones o Paso a paso por procedimientos, nuestra aplicacin se interrumpir en la primera lnea de cdigo ejecutable.

    Si hacemos clic en Ejecutar hasta el cursor, nuestra aplicacin se iniciar y se ejecutar hasta llegar a un punto de interrupcin o al lugar del punto de insercin, lo que ocurra antes. En algunos casos, no se produce una interrupcin. Esto significa que la ejecucin no llega en ningn momento a la lnea de cdigo en la que se ha establecido el punto de insercin.

  • Manejo de errores y excepciones 25

    Demostracin: Cmo utilizar las ventanas de depuracin

    En esta demostracin, aprenderemos a depurar una aplicacin utilizando:

    z Las ventanas Autos, Locals, Watch, y Command

    z Breakpoints

    z El comando Run To Cursor

    En esta demostracin, aprenderemos a depurar una aplicacin utilizando las ventanas Automtico, Variables locales, Inspeccin y Comandos, Puntos de interrupcin, y el comando Ejecutar hasta el cursor.

    Iniciar Visual Studio .NET y cargar el proyecto de la demostracin 1. Hacer clic en Inicio, seleccionar Todos los programas, seleccionar

    Microsoft Visual Studio .NET y, a continuacin, hacer clic en Microsoft Visual Studio .NET.

    2. En la Pgina de inicio, en el panel de Inicio, hacer clic en Abrir proyecto. 3. En el cuadro de dilogo Abrir proyecto, abrir la carpeta

    DebuggingApplication2, y hacer doble clic en DebuggingApplication2.sln. Esta carpeta se puede encontrar dentro del fichero demos08.zip.

    Utilizar el comando Ejecutar hasta el cursor 1. En el Explorador de soluciones, hacer clic con el botn derecho en

    Form1.vb y, a continuacin, hacer clic en Ver cdigo. 2. En el Editor de cdigo, en el cdigo del evento Form1_Load, hacer clic con

    el botn derecho en la siguiente lnea y, a continuacin, clic en Ejecutar hasta el cursor. names(0)= "Brandon"

    Observar que se inicia la aplicacin, y la ejecucin se detiene en la lnea especificada.

    Uso de la ventana Automtico 1. Examine la ventana Automtico. Si esta ventana no est visible, hacer clic

    en el men Depurar, seleccionar Ventana y, a continuacin, hacer clic en Automtico. Observar que la matriz names se encuentra vaca.

  • 26 Manejo de errores y excepciones

    2. En la barra de herramientas Depurar, hacer clic en Paso a paso por instrucciones. Observar que names(0) ahora contiene el nombre Brandon.

    3. En la barra de herramientas Depurar, hacer clic en Paso a paso por instrucciones. Observar que names(1) contiene el nombre Bob. La ventana Automtico muestra las variables de cdigo de la instruccin actual y el cdigo de la instruccin anterior.

    Uso de la ventana Variables locales 1. Examinar la ventana Variables locales. Si esta ventana no est visible,

    hacer clic en el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en Variables locales. La ventana Variables locales muestra las variables locales al contexto actual.

    2. En la ventana Variables locales, expandir Me. 3. En Me, expandir names.

    Uso de la ventana Inspeccin 4. Examinar la ventana Inspeccin 1. Si esta ventana no est visible, hacer clic

    en el men Depurar, seleccionar Ventanas, seleccionar Inspeccin y, a continuacin, hacer clic en Inspeccin 1.

    5. En el Editor de cdigo, hacer clic con el botn derecho en names(0) y, a continuacin, hacer clic en Agregar inspeccin. Las ventanas de inspeccin nos permiten crear nuestra propia lista personalizada de las variables que deseamos monitorizar mientras se ejecuta el cdigo.

    6. En el Editor de cdigo de Form1.vb, en la funcin Sub Button1_Click, hacer clic con el botn derecho en maxLen y, a continuacin, hacer clic en Agregar inspeccin. Observar que el valor maxLen se muestra como Nombre 'maxLen' no est declarado. Esto se debe a que el cdigo que declara maxLen no se ha ejecutado todava.

    7. En el Editor de cdigo de Form1.vb, en la funcin Sub Button1_Click, hacer clic con el botn derecho en la instruccin For y, a continuacin, hacer clic en Ejecutar hasta el cursor.

    8. En el cuadro de dilogo Form1, hacer clic en Button1. La ejecucin se detiene en la instruccin For en el cdigo del evento Button1_Click. Examine la ventana Inspeccin 1 y observar que el valor de maxLen ahora es 0. Observar tambin, en la ventana Variables locales, que los valores contenidos para los elementos 2 hasta 4 en la matriz names se muestran en rojo. Estos valores estn en rojo porque han cambiado desde la ltima vez que la aplicacin se depur.

    Uso de puntos de interrupcin y de la ventana Comandos

  • Manejo de errores y excepciones 27

    1. En el Editor de cdigo de Form1.vb, en la funcin Sub Button1_Click,

    hacer clic con el botn derecho en la siguiente lnea de cdigo y, a continuacin, hacer clic en Insertar punto de interrupcin. If names(index).Length > maxLen Then

    2. En el men Depurar, seleccionar Ventanas y hacer clic en Puntos de

    interrupcin. 3. En la ventana Puntos de interrupcin, hacer clic con el botn derecho en la

    entrada de punto de interrupcin y hacer clic en Propiedades. 4. En la ventana Propiedades de punto de interrupcin, en la ficha Archivo,

    hacer clic en Condicin. Las condiciones le permiten detener la ejecucin en la lnea del punto de interrupcin cuando se cumple una determinada condicin.

    5. En la ventana Condicin de punto de interrupcin, en Condicin, escribir index=3 y hacer clic en Aceptar.

    6. En la ventana Propiedades de puntos de interrupcin, hacer clic en Aceptar.

    7. Hacer clic en el botn Continuar de la barra de herramientas. La ejecucin se detiene en la lnea del punto de interrupcin.

    8. En el men Depurar, seleccionar Ventanas y hacer clic en Inmediato. La Ventana de comandos soporta dos modos distintos: modo Comando y modo Inmediato. Podemos utilizar el modo Comando para ejecutar comandos de Visual Studio .NET directamente en el entorno de desarrollo, obviando el sistema del mens. Podemos utilizar el modo Inmediato cuando depuramos una aplicacin. Utilizar el modo Inmediato para evaluar expresiones, ejecutar instrucciones, mostrar valores de variables, etc.

    9. En la Ventana de comandos, escribir ?index y pulsar ENTER. El valor 3 se muestra en la ventana. Esto confirma que se ha producido el punto de interrupcin condicional.

    10. En la Ventana de comandos, escribir names(4)=Christopher y pulsar ENTER.

    11. En la Ventana de comandos, escribir ?names(4) y pulsar ENTER. La cadena Christopher aparece en la ventana. Esto demuestra que podemos utilizar la Ventana de comandos para cambiar el valor de variables.

    12. Hacer clic en el botn Continuar de la barra de herramientas. Observar que el cuadro de mensaje ahora informa de que Christopher es el nombre ms largo de la matriz names.

    13. En el cuadro de mensaje, hacer clic en Aceptar. 14. Cerrar Form1.

    Cerrar Visual Studio .NET En el men Archivo, hacer clic en Salir.

  • 28 Manejo de errores y excepciones

    Cmo utilizar las ventanas de depuracin

    VentanaVentanaVentana Utilice esta ventana paraUtilice esta ventana Utilice esta ventana parapara

    AutosAutosVer variables en la instruccin actual y tres instrucciones antes y despus de la instruccin actual

    Ver variables en la instruccin actual y tres instrucciones antes y despus de la instruccin actual

    Call StackCall Stack Ver el histrico de llamadas a la lnea de cdigo que se est depurandoVer el histrico de llamadas a la lnea de cdigo que se est depurando

    LocalsLocals Ver y modificar variables locales Ver y modificar variables locales

    WatchWatch Crear una lista personalizada de variables y

    expresiones que monitorizar Ver y manipular cualquier expresin watch

    Crear una lista personalizada de variables y expresiones que monitorizar Ver y manipular cualquier expresin watch

    Introduccin El depurador de Visual Studio .NET dispone de diversas ventanas que nos permiten inspeccionar nuestro programa en detalle y modificar su estado. Las ventanas Automtico, Pila de llamadas, Variables locales e Inspeccin son las ventanas de depuracin que probablemente ms utilizaremos.

    Uso de la ventana Automtico

    Podemos utilizar la ventana Automtico para visualizar variables en la instruccin actual y tres instrucciones anteriores y posteriores a la instruccin actual. La instruccin actual es la instruccin en el lugar de ejecucin actual (la instruccin que se ejecutar a continuacin si la ejecucin contina). Tambin podemos utilizar la ventana Automtico para modificar el valor de una variable.

    Modificar el valor de una variable utilizando la ventana Autos 1. En el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en

    Automtico. 2. En la columna de valores, hacer doble clic en el valor que desea cambiar. 3. Escribir el nuevo valor y pulsar ENTER.

    Uso de la ventana Pila de llamadas

    Podemos utilizar la ventana Pila de llamadas para ver el histrico de llamadas de la lnea de cdigo que se est depurando, incluyendo cualquier tipo de parmetros y valores de parmetros. Se denomina pila de llamadas (call stack) a la serie de procedimientos invocados dentro de una aplicacin.

    Ver el cdigo fuente de un procedimiento en la pila de llamadas 1. En el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en

    Pila de llamadas. 2. En la ventana Pila de llamadas, hacer clic con el botn derecho en el

    procedimiento cuyo cdigo fuente desea ver y, a continuacin, hacer clic en Ir a cdigo fuente en el men de acceso directo.

  • Manejo de errores y excepciones 29

    La ventana Pila de llamadas muestra el nombre de cada procedimiento y el

    lenguaje de programacin en el que est escrito. El nombre del procedimiento puede estar acompaado de informacin opcional, como el nombre del mdulo, nmero de lnea, byte offset y nombres, tipos y valores de parmetros. La visualizacin de esta informacin opcional puede activarse o desactivarse.

    Cambiar la informacin opcional mostrada en la ventana Pila de llamadas

    1. En el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en Pila de llamadas.

    2. Hacer clic con el botn derecho en la ventana Pila de llamadas y seleccionar o deseleccionar Mostrar la informacin deseada en el men de acceso directo.

    Uso de la ventana Variables locales

    Podemos utilizar la ventana Variables locales para visualizar y modificar variables locales al contexto actual. Esta ventana proporciona informacin explcita sobre objetos, como informacin sobre herencia.

    Modificar el valor de una variable utilizando la ventana Variables locales

    1. En el men Depurar, seleccionar Ventanas y, a continuacin, hacer clic en Variables locales.

    2. En la ventana Variables locales, hacer doble clic en el valor que desea modificar.

    3. Escribir el nuevo valor y pulsar ENTER.

    La ventana Variables locales muestra todas las variables en el contexto actual y, por ello, es posible que no sea la ventana ideal para concentrar varias variables especficas. Para monitorizar nicamente las variables que especifiquemos, es mejor utilizar la ventana Inspeccin.

    Uso de la ventana Inspeccin

    Podemos utilizar la ventana Inspeccin para crear nuestra propia lista personalizada de variables o expresiones a monitorizar mientras el cdigo se ejecuta. Podemos ver y manipular cualquier expresin a inspeccionar en la ventana Inspeccin.

    Agregar una variable a la ventana Inspeccin Hacer clic con el botn derecho en la variable del Editor de cdigo y, a

    continuacin, hacer clic en Agregar inspeccin.

    Evaluar una variable o expresin utilizando la ventana Inspeccin 1. En el men Depurar, seleccionar Ventanas, hacer clic en Inspeccin y, a

    continuacin, en Inspeccin 1. 2. En la ventana Inspeccin, hacer clic en una fila vaca en la columna

    Nombre. 3. Escribir o pegar la variable o expresin en la fila seleccionada. 4. Pulsar ENTER. El resultado aparece en la columna de valores.

    Si hemos escrito el nombre de una matriz o variable de objeto, aparecer un control en rbol junto al nombre en la columna Nombre. Hacer clic en ms (+) o menos (-) en la columna Nombre para expandir o colapsar la variable.

  • 30 Manejo de errores y excepciones

    5. La expresin permanecer en la ventana Inspeccin hasta que la eliminemos.

    Ventana Inspeccin o cuadro de dilogo Inspeccin rpida?

    El depurador de Visual Studio .NET proporciona un cuadro de dilogo modal denominado Inspeccin rpida que ofrece una forma rpida de evaluar o modificar una sola variable o expresin. Debido a que Inspeccin rpida es modal, no podemos dejarlo abierto para inspeccionar una variable o expresin mientras vamos recorriendo nuestro programa. Si deseamos inspeccionar una variable o expresin mientras recorremos nuestro programa, agregaremos esa variable o expresin a la ventana Inspeccin. No obstante, si simplemente deseamos realizar un clculo rpido que implique una o ms variables, podemos utilizar Inspeccin rpida.

    Manipular una variable utilizando Inspeccin rpida En modo de interrupcin, en una ventana fuente, hacer clic con el botn

    derecho en un nombre de variable y clic en Inspeccin rpida en el men de acceso directo. De ese modo, la variable se ubicar automticamente en el cuadro de dilogo Inspeccin rpida.

  • Manejo de errores y excepciones 31

    Cmo utilizar la Ventana de comandos

    Utilice la ventana Comando para: z Issue comandos (modo Comando)z Depurar y evaluar expresiones (modo Inmediato)

    TareaTareaTarea SolucinSoluciSolucinn EjemploEjemploEjemplo

    Evaluar expresionesEvaluar expresiones Encabezar la expresin con un signo de interrogacin (?)Encabezar la expresin con un signo de interrogacin (?) ?myVariable?myVariable

    Cambiar a modo Inmediatodesde modo Comando

    Cambiar a modo Inmediatodesde modo Comando

    Escribir immed en la ventana, sin el signo mayor que (>)

    Escribir immed en la ventana, sin el signo mayor que (>) immedimmed

    Regresar a modo Comando desde modo Inmediato

    Regresar a modo Comando desde modo Inmediato Escribir >cmd en la ventanaEscribir >cmd en la ventana >cmd>cmd

    Entrar temporalmente en modo Comando desde modo Inmediato

    Entrar temporalmente en modo Comando desde modo Inmediato

    Escribir el comando, precedido del signo mayor que (>)

    Escribir el comando, precedido del signo mayor que (>)

    >alias >alias

    Introduccin La Ventana de comandos no es una ventana de depuracin, pero puede resultar til en la depuracin del cdigo. Podemos utilizarla para invocar comandos (modo Comando) o para depurar y evaluar expresiones (modo Inmediato).

    Uso de la Ventana de comandos Abrir la Ventana de comandos

    En el men Ver, seleccionar Otras ventanas y, a continuacin, hacer clic en Ventana de comandos.

    La siguiente tabla describe varios comandos que podemos utilizar en la Ventana de comandos.

    Tarea Solucin Ejemplo

    Evaluar expresiones Encabezar la expresin con un signo de interrogacin (?)

    ?miVariable

    Cambiar a modo Inmediato desde modo Comando

    Escribir immed en la ventana, sin el signo mayor que (>)

    immed

    Regresar a modo Comando desde modo Inmediato

    Escribir >cmd en la ventana >cmd

    Entrar temporalmente en modo Comando mientras estamos en modo Inmediato (para ejecutar un comando)

    Escribir el comando en la ventana, precedido del signo mayor que (>)

    >alias

    Debemos incluir el signo mayor que (>) cuando invocamos comandos de Visual Studio .NET estando en modo Inmediato. Los comandos escritos en modo Comando no van precedidos del signo mayor que.

    Nota

  • 32 Manejo de errores y excepciones

    Prctica: Cdigo de depuracin

    Examine el cdigo en el controlador de eventos Click

    Genere y ejecute la aplicacin

    Proponga una forma de solucionar el error

    Utilice las herramientas de depuracin para localizar el error lgico

    En esta prctica, trabajaremos el proceso de depurar una aplicacin sencilla. Para localizar el error lgico de un programa, estableceremos un punto de interrupcin, recorreremos el cdigo y utilizaremos la ventana de comandos para comprobar los valores almacenados en las variables mientras nuestro cdigo se ejecuta en modo de interrupcin. Sugeriremos cmo podra solucionarse el error lgico, e implementaremos una posible solucin para el error.

    Abrir el proyecto Abrir el proyecto DebugApplication.sln, que se encuentra en la carpeta

    Starter dentro del fichero practs08.zip. Esta aplicacin calcula el nmero de palabras de una frase. El usuario escribe una frase en un cuadro de texto de un formulario y hace clic en un botn; a continuacin, aparece un cuadro de mensaje informando al usuario de cuantas palabras contiene la frase que se ha escrito. La siguiente imagen muestra la aplicacin que se est ejecutando.

  • Manejo de errores y excepciones 33

    Examinar el controlador de eventos NumberOfWords_Click

    Abrir el controlador de eventos NumberOfWords_Click, y examinar el cdigo para entender cmo se ha generado la aplicacin para que responda a las funcionalidades previstas. Responder a las siguientes preguntas sobre el cdigo. a. Observar las declaraciones de la variable. Cmo se asignar su valor a

    la variable sentence? Para qu se utiliza la funcin Trim? La cadena introducida por el usuario en InputTextBox se asignar a la variable sentence. La funcin Trim elimina los espacios al principio y al final de la cadena. _________________________________________________________

    _________________________________________________________

    b. Explicar el funcionamiento del cdigo que asigna inicialmente un valor a location. Observar que el trmino Chr(32) en la declaracin constante para spaceDelimeter hace referencia al carcter de espacio en blanco. La funcin InStr buscar un carcter de espacio en la cadena de la frase, empezando por el primer carcter. Si encuentra un carcter de espacio, asignar la posicin del carcter a location. Si no encuentra un carcter de espacio, la funcin devolver un valor 0. _________________________________________________________

    _________________________________________________________

    c. Qu condicin impedir que el bucle While se repita? Si no hay ningn carcter de espacio, el valor de location ser 0. Cuando el valor de location es 0, el cdigo del bloque While no se ejecuta. La ejecucin del cdigo seguir hasta el bloque IfThen. _________________________________________________________

    _________________________________________________________

    d. Para qu se utiliza la variable wordCount? La variable wordCount almacena el nmero total de palabras de la frase. _________________________________________________________

    _________________________________________________________

    e. Para qu se asigna un nuevo valor a location en el bucle While? Por qu la asignacin de ubicacin utilizando la funcin InStr sucede de nuevo? Despus de que cada espacio haya sido encontrado, es necesario ejecutar una bsqueda de ms espacios. Este cdigo busca incidencias adicionales del carcter de espacio ms all de cualquier incidencia que ya se haya contado. _________________________________________________________

    _________________________________________________________

  • 34 Manejo de errores y excepciones

    f. Describir el flujo de cdigo que podramos esperar si un usuario escribiera la palabra Test sin espacios en InputTextBox. Qu valor devolvera el cuadro de mensaje? Debido a que no hay espacios en el texto introducido por el usuario, el valor de location se establecer a 0. El bucle While evaluar el valor de location, y como el valor es 0, la ejecucin de cdigo pasar al bloque de cdigo IfThen. La longitud de sentence no es igual a 0, por tanto, wordCount se incrementar de 0 a 1 en el bloque IfThen. El cuadro de mensaje mostrar el mensaje Total number of words 1. __________________________________________________________

    __________________________________________________________

    g. Describir el flujo de cdigo que podramos esperar si un usuario escribiera las palabras Test Me en InputTextBox. Qu valor devolvera el cuadro de mensaje? Debido a que hay un espacio en la posicin 5 en el texto introducido por el usuario, el valor de location se establecer en 5. El bucle While evaluar el valor de location e incrementar wordCount de 0 a 1. Debido a que no hay espacios en el texto restante, el valor de location se reinicializar en 0. El bucle While evaluar el nuevo valor de location, y como el valor ahora es 0, la ejecucin del cdigo pasar al bloque de cdigo IfThen. La longitud de sentence no es igual a 0, por tanto, wordCount se incrementar de 1 a 2 en el bloque IfThen. El cuadro de mensaje mostrar el mensaje Total number of words 2. __________________________________________________________

    __________________________________________________________

    Comprobar las respuestas antes de continuar con la prctica. Para revisar las respuestas, podemos utilizar las que se proporcionan en el material del estudiante, comparar las respuestas con otro estudiante o mostrarlas al profesor. Para revisar las respuestas de las dos ltimas preguntas, tambin podemos establecer un punto de interrupcin al principio del bucle While y utilizar el comando Paso a paso por instrucciones (F8) para movernos paso a paso por el cdigo.

    Nota

  • Manejo de errores y excepciones 35

    Generar y ejecutar la aplicacin

    1. Ejecutar la aplicacin en modo de depuracin. 2. En el cuadro Enter a sentence, escribir la palabra Test y hacer clic en Total

    Words. El cuadro de mensaje debera mostrar 1, el nmero correcto de palabras. Hacer clic en OK.

    3. En el cuadro Enter a sentence, escribir la frase Test me y hacer clic en Total Words. El cuadro de mensaje debera mostrar 2, el nmero correcto de palabras de la frase. Hacer clic en OK.

    4. Modificar la frase existente en el cuadro Enter a sentence aadiendo espacios entre las dos palabras.

    5. Hacer clic en Total Words. Aparecer un nmero incorrecto de palabras en el cuadro de mensaje. Hacer clic en OK.

    Localizar el cdigo que provoca el error 1. Para localizar el error lgico de esta aplicacin, considerar las siguientes

    cuestiones: a. Qu entrada del usuario causa este error?

    El error ocurre cuando un usuario escribe varios caracteres de espacio en blanco entre dos palabras consecutivas. _________________________________________________________

    _________________________________________________________

    b. Qu herramientas de depuracin podramos utilizar para localizar el cdigo que causa el error? Respuesta posible: establecer un punto de interrupcin en el controlador de eventos, ejecutar la aplicacin y utilizar el comando Paso a paso por instrucciones para recorrer paso a paso las lneas del cdigo una a una. Utilizar la ventana Automtico para examinar los valores de la variable y determinar cundo ocurre el error. _________________________________________________________

    _________________________________________________________

    2. En el controlador de eventos NumberOfWords_Click, en la lnea de cdigo que inicia el bucle While, establecer un punto de interrupcin.

    3. Ejecutar la aplicacin. En el cuadro Enter a sentence, escribir Test Me con espacios adicionales entre las dos palabras y, a continuacin, hacer clic en el botn Total Words.

  • 36 Manejo de errores y excepciones

    4. Utilizar el comando Paso a paso por instrucciones (F8) para recorrer paso a paso las lneas del cdigo. A medida que recorremos el cdigo, utilizar la ventana Automtico para examinar los valores de la variable y determinar cundo ocurre el error. Puede utilizar las siguientes preguntas como ayuda para localizar el error lgico: a. Cul es el valor de location durante la primera repeticin del bucle

    While? 5. __________________________________________________________

    __________________________________________________________

    b. Incrementa el valor de wordCount adecuadamente despus de que se encuentre el primer espacio? S. __________________________________________________________

    __________________________________________________________

    c. Cul es el valor de location cuando el valor de wordCount cambia a 2? 6. __________________________________________________________

    __________________________________________________________

    d. Cuntas palabras se han contado realmente si el valor actual de location es 6? Una. __________________________________________________________

    __________________________________________________________

    e. Describir el problema de este cdigo y proponer una forma para corregir el error. El cdigo del bucle While utiliza la presencia de un carcter de espacio en la cadena sentence como indicativo de que hay una palabra que debe contarse. Esta lgica no tiene en cuenta la posible presencia de dos o ms caracteres de espacio entre dos palabras consecutivas. El siguiente procedimiento describe una forma para corregir el error. __________________________________________________________

    __________________________________________________________

  • Manejo de errores y excepciones 37

    Corregir el error lgico

    Una forma de solucionar el problema de este cdigo es eliminar cada palabra despus de que sea contada y, a continuacin, eliminar los espacios desde el principio de la cadena restante. La variable sentence es un tipo de datos String, y proporciona el mtodo Remove para eliminar caracteres de una cadena. El siguiente cdigo muestra cmo utilizar el mtodo Remove y la funcin LTrim para solucionar el error: sentence = LTrim(sentence.Remove(0, location))

    Debido a que eliminamos una palabra de la cadena con el cdigo anterior, tambin necesitamos modificar la invocacin a la funcin InStr del bucle While y establecer la posicin de inicio en 1 cada vez que el cdigo se ejecute. Corregir el cdigo del controlador de eventos NumberOfWords_Click. El

    cdigo corregido debera ser similar al siguiente: While location < > 0 wordCount += 1 sentence = LTrim(sentence.Remove(0, location)) location = InStr(1, sentence, spaceDelimeter) End While

    Probar la aplicacin Ejecutar y probar la aplicacin en modo de depuracin.

    Archivos de solucin Los archivos de solucin se encuentran en la carpeta Solution dentro del fichero

    practs08.zip.

  • 38 Manejo de errores y excepciones

    Leccin: Gestin de excepciones

    La clase Exception

    Qu es la gestin estructurada de excepciones?

    Cmo utilizar la instruccin TryCatch

    Cmo utilizar el bloque Finally

    Cmo lanzar excepciones

    Directrices para el uso de la gestin estructurada de excepciones

    Introduccin Visual Basic soporta la gestin estructurada de excepciones. La gestin estructurada de excepciones proporciona una forma de controlar los errores que puedan producirse en un bloque de cdigo, permitiendo al mismo tiempo que nuestra aplicacin se ejecute. Con el uso de la gestin estructurada de excepciones en nuestra aplicacin, podemos prever errores potenciales e impedir que interfieran en el uso previsto de nuestra aplicacin.

    En esta leccin, estudiaremos cmo implementar la gestin estructurada de excepciones en Visual Basic .NET, y cundo utilizar este mtodo de gestin de errores.

    Estructura de la leccin Esta leccin incluye los siguientes temas y actividades:

    La clase Exception Qu es la gestin estructurada de excepciones? Cmo utilizar la instruccin TryCatch Cmo utilizar el bloque Finally Cmo lanzar excepciones Directrices para el uso de la gestin estructurada de excepciones Demostracin: uso de la gestin estructurada de excepciones

    Objetivos de la leccin En esta leccin, aprenderemos a:

    Explicar la utilidad de la gestin estructurada de excepciones. Crear y utilizar bloques TryCatchFinally. Lanzar excepciones.

  • Manejo de errores y excepciones 39

    La clase Exception

    Las clases Exception permiten recuperar informacin sobre cualquier excepcin que encontremos

    Las propiedades de la clase base Exception permiten analizar excepcionesz Principales propiedades: StackTrace, Message, HelpLink, Source

    IOExceptionIOException

    ExceptionException

    OutOfMemoryExceptionOutOfMemoryException

    ApplicationExceptionApplicationException

    SystemExceptionSystemException

    FileNotFoundExceptionFileNotFoundException

    El .NET Framework proporciona el siguiente modelo de objeto de excepciones:

    Qu es una excepcin? Una excepcin es cualquier condicin de error o comportamiento imprevisto que se produce durante la ejecucin de un programa y requiere la ejecucin de cdigo fuera del flujo de control normal. Las excepciones pueden provocarse por un fallo de nuestro cdigo o de cdigo invocado, porque los recursos del sistema operativo no estn disponibles, por condiciones imprevistas que encuentre el CLR, etc. Una excepcin se lanza (en otras palabras, se origina) desde el rea del cdigo donde se ha producido un problema.

    La clase Exception En el .NET Framework, el entorno de ejecucin crea un objeto que representa una excepcin cundo sta se produce. Las excepciones son objetos que heredan de la clase base Exception. El .NET Framework define varias clases de excepciones. Estas clases proporcionan informacin sobre excepciones de un modo significativo y nos permiten recuperar informacin sobre cualquier excepcin que encontremos. Esta informacin nos ayuda a depurar eficazmente nuestras aplicaciones.

    La siguiente tabla describe algunas propiedades de la clase base Exception que nos ayudarn a identificar la localizacin del cdigo, tipo y causa de una excepcin. Cualquier excepcin que herede de la clase base proporcionar estas propiedades.

    Propiedad Descripcin StackTrace Ofrece una lista de los mtodos invocados que conducen a la excepcin,

    ayudndonos a encontrar en qu parte del cdigo se produce el error.

    Message Devuelve un mensaje de texto que describe el error. Utilizar esta propiedad para recuperar informacin acerca de porqu se ha lanzado una excepcin.

    Podemos cambiar el texto para que un mensaje crptico sea ms fcil de entender. Si no proporcionamos una cadena de texto para el mensaje de error, se utilizar el valor predeterminado.

    HelpLink Obtiene o establece un enlace a un archivo asociado de Ayuda.

    Source Obtiene o establece una cadena que contiene el nombre del objeto que causa el error o el nombre del ensamblado en el que se origin la excepcin.

  • 40 Manejo de errores y excepciones

    Qu es la gestin estructurada de excepciones?

    Detecta y responde a errores mientras se ejecuta una aplicacin

    Utiliza TryCatchFinally para encapsular y proteger bloques de cdigo que podran provocar errores

    z Cada bloque tiene uno o ms controladores asociados

    z Cada controlador especifica alguna forma de condicin de filtro en el tipo de excepcin que controla

    Ventajas:

    z Permite la separacin entre la lgica y el cdigo de gestin de errores

    z Facilita la lectura, depuracin y mantenimiento del cdigo

    Introduccin La gestin estructurada de excepciones es cdigo diseado para detectar y responder a errores durante la ejecucin combinando una estructura de control (similar a Select Case o While) con excepciones, bloques de cdigo protegidos y filtros.

    Consecuencias de no gestionar las excepciones

    Si se produce una excepcin en un mtodo no preparado para gestionarla, la excepcin se propaga hacia el mtodo invocador. Si no se gestiona en el mtodo que origina la llamada, la bsqueda de un controlador contina hasta la pila de llamadas. Si no existe un controlador para la excepcin, aparecer un mensaje de error y la aplicacin se cerrar.

    Uso de la gestin estructurada de excepciones

    Utilizando la instruccin TryCatchFinally, podemos proteger bloques de cdigo que potencialmente podran provocar errores.

    El bloque Try incluye una expresin que podra generar una excepcin. El bloque Try tiene una o ms instrucciones Catch asociadas, que filtran excepciones y las asocian con una determinada accin. Si se produce la excepcin, el entorno de ejecucin detiene la ejecucin normal e inicia la bsqueda de un bloque Catch que pueda capturar la excepcin, basndose en su tipo.

    Si no se encuentra un bloque Catch apropiado en el procedimiento inmediato, el entorno de ejecucin contina por la pila de llamadas buscando el procedimiento que origin la llamada.

    Si no se encuentra un bloque Catch apropiado all, el entorno de ejecucin busca el procedimiento que invoc el procedimiento de origin la llamada, y as sucesivamente, hasta encontrar un bloque Catch apropiado.

    Si se encuentra un bloque Catch, se considera que se ha capturado la excepcin, y la ejecucin se reinicia, empezando con el cuerpo del bloque Catch.

    Si no se encuentra ningn bloque Catch, aparecer un mensaje de error y la aplicacin se cerrar.

  • Manejo de errores y excepciones 41

    Con el uso de los bloques Try y Catch, separamos las instrucciones de control

    de errores de las instrucciones lgicas principales. De esto modo, se facilita la lectura y depuracin del programa.

  • 42 Manejo de errores y excepciones

    Cmo utilizar la instruccin TryCatch

    Ponga cdigo que podra lanzar excepciones en un bloque Try

    Gestione las excepciones en otro bloque CatchTry

    fs = New FileStream("data.txt", _ FileMode.Open)

    Catch ex As FileNotFoundException

    MessageBox.Show("File not found")

    Catch ex As Exception

    MessageBox.Show(ex.Message)

    End Try

    Try

    fs = New FileStream("data.txt", _ FileMode.Open)

    Catch ex As FileNotFoundException

    MessageBox.Show("File not found")

    Catch ex As Exception

    MessageBox.Show(ex.Message)

    End Try

    Program LogicProgram Logic

    Exception HandlingException Handling

    Sintaxis Podemos implementar la gestin estructurada de excepciones en Visual Basic .NET utilizando la instruccin TryCatch. El siguiente cdigo muestra la estructura de una instruccin TryCatch sencilla:

    Try ' Starts a structured exception handler Catch [optional filter] ' This code runs if the statements listed in the Try block ' fail and the filter on the Catch statement is true End Try ' Ends a structured exception handler

    Dnde ubicar el cdigo El bloque Try de un controlador de excepciones Try...Catch contiene la

    seccin de cdigo que deseamos que nuestro controlador de excepciones monitorice. Es conveniente ubicar las secciones de cdigo que podran lanzar excepciones en un bloque Try y el cdigo que controla las excepciones en un bloque Catch.

    Cmo se procesa la instruccin TryCatch

    El cdigo del bloque Try siempre se ejecuta. Si se produce un error durante la ejecucin de cualquier parte del cdigo de la seccin Try, Visual Basic examina cada instruccin Catch del controlador de excepciones hasta que concuerda el tipo de excepcin que se ha producido con el nombre de la excepcin especificado en la instruccin Catch y transfiere el control a la primera lnea de cdigo de la instruccin Catch. Si no se encuentra un bloque Catch apropiado, se produce un error.

    Las instrucciones Catch se procesan en orden; por ello, es importante el orden en que escribimos nuestras instrucciones Catch. Deberamos poner los bloques Catch destinados a excepciones especficas antes de un bloque Catch de una excepcin general.

    Importante

  • Manejo de errores y excepciones 43

    Ejemplo de uso de TryCatch

    El siguiente cdigo proporciona un ejemplo sencillo de un controlador de excepciones estructurado. En este ejemplo, se ejecuta el bloque Try. Si se produce un error FileNotFoundException, se ejecutar el cdigo del primer bloque Catch. Para el resto de errores, se ejecutar el cdigo del segundo bloque Catch.

    Observemos que en el primer bloque Catch buscamos errores especficos. El segundo bloque Catch est diseado para capturar cualquier error general.

    Try fs = New FileStream("data.txt", FileMode.Open) Catch ex As FileNotFoundException MessageBox.Show("File not Found") Catch ex As Exception MessageBox.Show(ex.Message) End Try

  • 44 Manejo de errores y excepciones

    Cmo utilizar el bloque Finally

    Seccin opcional; si se incluye, se ejecuta siempre Coloque cdigo de limpieza, como el utilizado para

    cerrar archivos, en el bloque FinallyTry

    fs = New FileStream("data.txt", FileMode.Open)

    Catch ex As FileNotFoundException

    MessageBox.Show("Data File Missing")

    Catch ex As Exception

    MessageBox.Show(ex.Message)

    Finally

    If Not (fs Is Nothing) Then fs.Close( )

    End Try

    Try

    fs = New FileStream("data.txt", FileMode.Open)

    Catch ex As FileNotFoundException

    MessageBox.Show("Data File Missing")

    Catch ex As Exception

    MessageBox.Show(ex.Message)

    Finally

    If Not (fs Is Nothing) Then fs.Close( )

    End Try

    Introduccin El bloque Finally es un bloque de cdigo opcional, que si se incluye, siempre se ejecuta. En este bloque, podemos definir acciones que deben realizarse con independencia de si se produce una excepcin. Se podran incluir acciones como cerrar archivos o liberar objetos. El bloque Finally se utiliza habitualmente para limpiar recursos utilizados en nuestro cdigo cuando un mtodo falla.

    El cdigo de la seccin Finally siempre se ejecuta al final, justo antes de que el bloque de gestin de errores pierda el alcance. Si incluimos este bloque, se ejecuta despus del bloque Try si no se producen errores, o despus de que el bloque Catch adecuado se haya procesado si se ha capturado una excepcin.

  • Manejo de errores y excepciones 45

    Ejemplo de uso de TryCatchFinally

    El siguiente cdigo proporciona un ejemplo de uso de un bloque Finally para cerrar un archivo abierto.

    En este ejemplo:

    El bloque Try siempre se ejecuta.

    Si hay un error FileNotFoundException, el cdigo del primer bloque Catch se ejecuta a continuacin, seguido del cdigo del bloque Finally.

    Si se produce cualquier otro tipo de error, el cdigo del segundo bloque Catch se ejecuta a continuacin, seguido del cdigo del bloque Finally.

    Si no hay ningn error, el cdigo del bloque Finally se ejecuta despus del cdigo del bloque Try.

    Try fs = New FileStream("data.txt", FileMode.Open) Catch ex As FileNotFoundException MessageBox.Show("Data File Missing") Catch ex As Exception MessageBox.Show(ex.Message) Finally If Not (fs Is Nothing) Then fs.Close( ) End Try

  • 46 Manejo de errores y excepciones

    Cmo lanzar excepciones

    Utilice la instruccin Throw para crear una excepcin que usted pueda controlar con el cdigo de la gestin estructurada de excepciones

    If (day < 1) Or (day > 365) Then

    Throw New ArgumentOutOfRangeException( )

    Else

    ...

    End If

    If (day < 1) Or (day > 365) Then

    Throw New ArgumentOutOfRangeException( )

    Else

    ...

    End If

    Introduccin La instruccin Throw crea una excepcin que podemos controlar con el cdigo de la gestin estructurada de excepciones. En algunos casos, deberamos utilizar una instruccin Throw para lanzar una excepcin, que puede ser atrapada invocando cdigo. Para entender cuando podramos necesitar lanzar una excepcin, pensemos en el siguiente escenario.

    Escenario utilizando la instruccin Throw

    Cuando escribimos aplicaciones grandes, es una prctica habitual escribir cdigo reutilizable: procedimientos Function y Sub que pueden utilizarse repetidamente en la aplicacin o en otras aplicaciones. Normalmente, una funcin toma ciertos parmetros, realiza una tarea y puede devolver un valor. Por ejemplo: una funcin que tome el da del ao como un entero y devuelva la fecha del calendario. Cuando pase el nmero 33, se supone que esta funcin devolver 2 de febrero.

    Como desarrolladores de esta funcin, necesitamos pensar cmo controlar el caso de pasar a la funcin un dato no vlido. Por ejemplo, si se pasa a la funcin un nmero negativo, o un nmero mayor que 365 en caso de aos no bisiestos, se producir un error, y el valor devuelto no ser correcto.

    La mejor solucin a este problema es dependiente de la aplicacin. En un caso sencillo, podramos pedir al usuario que introdujera la informacin correcta. Sin embargo, si esta funcin es invocada por otra funcin en lugar de por un usuario, la solucin no es tan sencilla. En este caso, podemos escribir una instruccin Throw que lance la excepcin adecuada en caso de que el argumento pasado a la funcin est fuera de rango.

    Ejemplo de uso de la instruccin Throw

    El siguiente cdigo utiliza la instruccin Throw para crear un error ArgumentOutOfRangeException:

    If (day < 1) Or (day > 365) Then Throw New ArgumentOutOfRangeException( ) Else ... End If

  • Manejo de errores y excepciones 47

    Directrices para el uso de la gestin estructurada de excepciones

    excepciones

    No utilice la gestin estructurada de excepciones para errores que probablemente se producirn de modo rutinario. Utilice otros bloques de cdigo para abordar estos errores.z IfEnd If, etc.

    No utilice la gestin estructurada de excepciones para errores que probablemente se producirn de modo rutinario. Utilice otros bloques de cdigo para abordar estos errores.z IfEnd If, etc.

    Devuelva un valor para los casos de errores habituales.zEjemplo: los mtodos de lectura de E/S de archivos

    no lanzan excepcin de fin de archivo.

    Devuelva un valor para los casos de errores habituales.zEjemplo: los mtodos de lectura de E/S de archivos

    no lanzan excepcin de fin de archivo.

    Organice los bloques Catch de especficos a generales.Organice los bloques Catch de especficos a generales.

    Introduccin La gestin estructurada de excepciones puede ser un modo eficaz de controlar posibles errores de nuestra aplicacin. Sin embargo, es importante saber cundo utilizar un bloque TryCatchFinally y cundo utilizar otras soluciones de cdigo para solucionar un problema. Si es probable que un problema ocurra, podemos buscarlo programticamente y abordarlo sin utilizar la gestin estructurada de excepciones. Cuando un error es realmente una excepcin (cuando es posible pero poco probable que ocurra) resulta adecuado el uso de la gestin estructurada de excepciones.

    Ejemplo de control de un error potencial utilizando una instruccin If

    El siguiente ejemplo utiliza una instruccin If para comprobar si una conexin est cerrada. Podemos utilizar este mtodo como alternativa para lanzar una excepcin si la conexin no est cerrada.

    If conn.State ConnectionState.Closed Then conn.Close( ) End If

    Ejemplo de control del mismo error utilizando TryCatch

    En el siguiente ejemplo se lanza una excepcin si la conexin no est cerrada.

    Try conn.Close( ) Catch ex As InvalidOperationException ' Do something with the error or ignore it End Try

    Cundo utilizar cada mtodo

    El mtodo que decidamos utilizar para controlar errores potenciales depende de con qu frecuencia esperamos que se produzca un determinado evento. Si el evento es realmente excepcional y es un error (como un error imprevisto de fin de archivo), utilizar la gestin de excepciones es mejor porque se ejecuta menos

  • 48 Manejo de errores y excepciones

    cdigo en el caso normal. Si el evento ocurre de modo rutinario, es mejor utilizar otro mtodo para buscar errores. En ese caso, si ocurre una excepcin, sta tardar ms en controlarse.

    Otras directrices para la gestin estructurada de excepciones

    La siguiente lista describe otras directrices a seguir cuando implementamos la gestin estructurada de excepciones:

    Si sabemos que se va a producir una situacin determinada, como un error de fin de archivo, no utilizar una excepcin para sealizarlo. Utilicemos el valor devuelto del mtodo. Por ejemplo, en el .NET Framework, los mtodos de lectura de archivos de entrada/salida (E/S) no lanzan una excepcin de fin de archivo. En lugar de ello, devuelven un valor que indica que no pueden leer desde el archivo.

    Ordenar siempre las excepciones en bloques Catch desde la ms a la menos especfica. Esta tcnica controla la excepcin especfica antes de pasar a un bloque Catch ms general.

    Utilizar los bloques TryFinally alrededor del cdigo que puede generar potencialmente una excepcin, y colocar sus instrucciones Catch en una ubicacin. Cuando lo haga, la instruccin Try generar la excepcin, la instruccin Finally cerrar o reasignar recursos, y la instruccin Catch controlar la excepcin desde una ubicacin central.

    Si se desea ms informacin sobre cundo utilizar la gestin estructurada de excepciones, consulte Best Practices for Handling Exceptions en la documentacin de Visual Studio .NET.

    Nota

  • Manejo de errores y excepciones 49

    Demostracin: Uso de la gestin estructurada de excepciones

    excepciones

    En esta demostracin, aprenderemos cmo implementar la gestin estructurada de excepciones en nuestro cdigo

    En esta demostracin, estudiaremos cmo utilizar la instruccin TryCatch para implementar la gestin estructurada de excepciones.

    Ejecutar la aplicacin 1. Abrir la solucin Exceptions.sln, que se encuentra en la carpeta Exceptions.

    Esta carpeta se puede encontrar dentro del fichero demos08.zip. 2. Abrir el Editor de cdigo del formulario Exceptions.vb y establecer seis

    puntos de interrupcin: uno en la instruccin Try, y uno en cada instruccin Catch en la rutina RunExceptions.

    3. Ejecutar el proyecto Exceptions. 4. Hacer clic en el botn Overflow del formulario. El proceso de Visual Basic

    se detendr en el primer punto de interrupcin. 5. Utilizar F8 para recorrer el cdigo paso a paso en el bloque Try, y explique

    los detalles del overflow. Explique que la clase OverflowException filtra la excepcin.

    6. Recorrer el resto de cdigo de la excepcin del overflow. Cuando se muestre el cuadro de mensaje, hacer clic en OK y pulsar F5 para proseguir con la ejecucin.

    7. Mostrar todos los botones restantes del formulario de prueba (Divide by zero, Index out of Range y Cast Error) del mismo modo: a. Hacer clic en el botn adecuado del formulario. b. Utilizar F8 para recorrer por el cdigo y mostrar cmo se controlan las

    excepciones en cada caso. c. Hacer clic en OK y pulsar F5 para proseguir con la ejecucin.

    8. Cuando hayamos mostrado el control de excepciones para cada botn finalizar la sesin de depuracin cerrando el formulario.

    9. Cerrar el entorno de desarrollo Visual Studio .NET.