Sie sind auf Seite 1von 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
Manejo de errores y excepciones 1

Descripción

Crear
Escribir
Interfaz
Código
„ Tipos de errores
Uso de Visual „ Uso del depurador
Studio .NET

„ Manejo de excepciones
Acceso
A datos Depurar
e Implantar

Introducción A medida que los programas son más grandes y más complejos, es inevitable
que se produzcan un determinado número de errores. Incluso la programación
más cuidadosa puede producir errores involuntarios, también denominados
bugs. El proceso de encontrar y eliminar estos errores se denomina depuración
(debugging).
En este módulo, estudiaremos los tipos de errores que pueden ocurrir en un
programa y cómo utilizar el depurador de Microsoft® Visual Studio® .NET, las
diversas ventanas de depuración y la gestión estructurada de excepciones para
ayudar a diagnosticar, corregir y realizar el tratamiento de errores.
Objetivos En este módulo, aprenderemos a:
„ Definir y ver ejemplos de errores de sintaxis, tiempo de ejecución y lógica.
„ Depurar código utilizando el depurador de Visual Studio .NET.
„ Implementar en nuestra aplicación la gestión estructurada de excepciones.
2 Manejo de errores y excepciones

Lección: Tipos de errores

„ ¿Qué son los errores de sintaxis?


„ ¿Que son los errores de tiempo de ejecución?
„ ¿Que son los errores de lógica?

Introducción Los errores de programación normalmente se dividen en tres categorías: errores


de sintaxis, errores de tiempo de ejecución y errores de lógica. Utilizaremos
diferentes métodos y herramientas para encontrar y solucionar cada tipo de
error.
Estructura de la lección Esta lección incluye los siguientes temas y actividades:
„ ¿Qué son los errores de sintaxis?
„ ¿Qué son los errores de tiempo de ejecución?
„ ¿Qué son los errores de lógica?
„ Demostración: Tipos de errores

Objetivo de la lección En esta lección, aprenderemos a describir la diferencia entre errores de sintaxis,
de tiempo de ejecución y de lógica.
Manejo de errores y excepciones 3

¿Qué son los errores de sintaxis?

Error
Error de
de sintaxis
sintaxis
Error
Error de
de sintaxis
sintaxis

Visualizar errores en la Lista de tareas:

Introducción El tipo más obvio de error es un error de sintaxis, que tiene lugar cuando
escribimos código de un modo no permitido por las reglas del lenguaje.
Algunos ejemplos más habituales incluyen una palabra clave mal escrita, la
omisión de puntuación requerida, o una construcción incorrecta (como una
instrucción For sin la correspondiente instrucción Next, o la palabra clave If en
una línea sin un operador condicional).
Encontrar errores de Visual Basic® .NET muestra los errores de sintaxis mientras escribimos cada
sintaxis instrucción del código de nuestra aplicación. La parte de código que contiene el
error aparece con un subrayado en forma de diente de sierra. Cuando colocamos
el cursor del ratón sobre el código subrayado, aparece un consejo con una breve
descripción del error junto al cursor.
Los errores de sintaxis son recogidos por el compilador, el cual muestra un
mensaje de error informándonos del problema. Si ignoramos los errores de
sintaxis mientras escribimos el código, podemos visualizar y abordarlos en
cualquier momento en la ventana de la Lista de tareas. Si intentamos generar
nuestra aplicación 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 La ventana Lista de tareas incluye una descripción del error, la ruta al archivo
ventana Lista de tareas en el que se ha producido el error y el número de la línea del código que
contiene el error. La descripción del error es la misma información que
obtenemos si posicionamos el cursor del ratón sobre la parte subrayada del
código en el Editor de código.
Podemos editar los errores haciendo doble clic en la entrada correspondiente en
la Lista de tareas. El punto de inserción se posiciona en el archivo correcto y la
línea exacta donde se encuentra el error, de modo que podemos cambiar nuestro
código. En cuanto finalicemos los cambios y salgamos de la línea modificada,
se actualizarán las entradas de la ventana Lista de tareas.
En la ventana Lista de tareas, también podemos ver tareas que hemos creado
comentando nuestro código con la frase TODO.
Visualizar errores en la También podemos utilizar la ventana Resultados para ver los errores de
ventana de Resultados generación. Esta ventana muestra una lista de avisos, errores y el estado de
generación mientras Visual Studio .NET está generando la aplicación. Al final
del proceso de generación, proporciona un resumen, incluyendo la ubicación de
los errores de sintaxis (número de línea y archivo) y una breve descripción de
los problemas.
Manejo de errores y excepciones 5

¿Qué son los errores de tiempo de ejecución?

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

Introducción Los errores de tiempo de ejecución son errores que ocurren cuando una
instrucción intenta realizar una operación que es imposible llevar a cabo; por
ejemplo, referenciar un objeto inaccesible. Los errores de tiempo de ejecución
apareen durante la ejecución del código.
Ejemplo de un error en Con frecuencia, los errores de tiempo de ejecución son el resultado de acciones
tempo de ejecución imprevistas. Por ejemplo, un usuario podría olvidar insertar un disquete en una
unidad, o seleccionar un archivo de entrada de datos no válido. Un error
habitual en tiempo de ejecución es intentar dividir por cero. Pensemos en el
siguiente código:
Velocidad = Kilómetros / Horas

Si la variable Horas es igual a cero, la división es una operación no válida,


aunque la instrucción sea sintácticamente correcta.
Consecuencias de los El compilador no captura errores de tiempo de ejecución. Los compiladores
errores de tiempo de únicamente capturan errores en la estructura del código que escribimos, no
ejecución errores en la funcionalidad.
Si se produce un error de tiempo de ejecución no gestionado mientras nuestro
programa se está ejecutando como una generación en modo debug, aparecerá un
mensaje de error que nos permitirá entrar en modo de interrupción y abordar el
problema. Si se produce un error de tiempo de ejecución cuando nuestra
aplicación se está ejecutando como una generación en modo release, puede
hacer que nuestro programa se detenga respondiendo con o sin un mensaje de
error. En términos coloquiales, puede hacer que su programa falle o se cuelgue.
Podemos utilizar las herramientas de depuración de Visual Studio .NET para
aislar errores y escribir código de control de errores para controlar las
condiciones que podrían generar errores de tiempo de ejecución. Para controlar
los errores de tiempo de ejecución, también podemos escribir controladores de
excepciones que atrapen los errores y lleven a cabo una acción prescrita, como
corregir el problema, indicando al usuario que realice una acción, o guardando
6 Manejo de errores y excepciones

datos antes de finalizar el programa. Otro modo de minimizar errores de tiempo


de ejecución es validar todas las formas de introducción de datos del usuario.
Manejo de errores y excepciones 7

¿Qué son los errores de lógica?

„ Definición: Un error que hace que una aplicación


produzca resultados incorrectos
z Puede no generar un mensaje de error
z Se encuentra probando la aplicación y analizando los
resultados
Dim
Dim xx As
As Integer
Integer == 22
Do
Do While
While xx << 10
10
'' Code statements
Code statements
xx -=
-= 11
Loop
Loop

Introducción Los errores lógicos son errores que se producen cuando una aplicación no se
comporta del modo previsto. Estos errores son especialmente difíciles de
encontrar porque es posible que no generen un mensaje de error. Una aplicación
puede tener un código válido sintácticamente y ejecutarse sin realizar ninguna
operación no válida, pero producir resultados incorrectos.
Ejemplo de error lógico El siguiente código contiene un error lógico que en algún momento provocará
un error de tiempo de ejecución.
Dim x As Integer = 2
Do While x < 10
' Code statements
x -= 1
Loop

En este código, el bucle While se ejecuta mientras el valor de x es menor de 10.


Dentro del bucle, la instrucción x -= 1 contiene un error lógico, 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 condición x < 10 será siempre verdadera, lo cual produce un
bucle infinito. Se producirá un error de tiempo de ejecución cuando el valor de
x exceda el valor que puede almacenarse en un Integer.
Encontrar y solucionar El único modo de verificar que una aplicación funciona correctamente es
errores lógicos probarla y analizar los resultados. Como parte del proceso de depuración,
podemos utilizar las herramientas de depuración de Visual Studio .NET para
aislar y corregir errores lógicos de nuestro código.
8 Manejo de errores y excepciones

Demostración: Tipos de errores

„ En esta demostración, 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 ejecución
z Error de lógica

En esta demostración, estudiaremos distintos tipos de errores.

Ë Crear un error de sintaxis


1. Iniciar Visual Studio .NET.
2. Crear una aplicación 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 botón.
5. En la lista de parámetros de la función MessageBox, utilizar el carácter de
continuación de línea para romper incorrectamente el código de los
parámetros del cuadro de mensaje. Nuestro código debería ser similar al
siguiente:
MessageBox.Show("Compile-time Error", MessageBox _
Buttons.OK)

6. Intentar la generación de la aplicación. Se creará un error de sintaxis.


7. Solucionar el problema eliminando el carácter de continuación de línea, y
generar de nuevo la aplicación.
Manejo de errores y excepciones 9

Ë Crear un error de tiempo de ejecución


1. Modificar el controlador de eventos Button1_Click. Sustituir el código por
el código siguiente, el cual generará un error de tiempo de ejecución al
intentar dividir por cero.
Dim i, j As Integer
j = 0
i = 4 / j

2. Generar y ejecutar la aplicación.


3. Hacer clic en Button1. Se generará un error de tiempo de ejecución.
4. En el cuadro de diálogo Microsoft Development Environment, hacer clic
en Continuar para cerrar la aplicación.

Ë Crear un error lógico


1. Añadir dos controles TextBox a Form1.
2. Eliminar el código existente en el controlador de eventos Button1_Click.
3. Añadir el siguiente código, que lee dos valores de los cuadros de texto,
añade los valores y muestra el resultado en un cuadro de mensaje.
MessageBox.Show(TextBox1.Text + TextBox2.Text)

4. Generar y ejecutar la aplicación.


5. Escribir dos números en los cuadros de texto.
6. Hacer clic en Button1. El resultado es la concatenación de los dos números,
que no es el resultado previsto. Éste es un error lógico.
7. Cerrar la aplicación y cambiar el código para utilizar la función CInt.
Nuestro código debería ser similar al siguiente:
MessageBox.Show(CInt(TextBox1.Text) + CInt(TextBox2.Text))

8. Generar y ejecutar la aplicación.


9. Escribir dos valores enteros en los cuadros de texto y hacer clic en Button1.
10. Cerrar la aplicación.
10 Manejo de errores y excepciones

Lección: Uso del depurador

„ ¿Qué es el Modo Break?


„ Cómo utilizar Breakpoints
„ Cómo modificar Breakpoints
„ La barra de herramientas de depuración
„ How to Step Through Code
„ Cómo utilizar las ventanas de depuración
„ Cómo utilizar la ventana Command

Introducción Las herramientas de depuración resultan de ayuda en el diagnóstico de errores


del programa al ayudarnos a examinar el flujo de nuestro programa. Podemos
utilizar herramientas de depuración para detener nuestro programa en
ubicaciones establecidas durante la ejecución del código, examinar cambios en
valores de variables y propiedades, y movernos paso a paso por partes del
código.
Estructura de la lección Esta lección incluye los siguientes temas y actividades:
„ Demostración: cómo depurar una aplicación
„ ¿Qué es el modo de interrupción?
„ Cómo utilizar puntos de interrupción
„ Cómo modificar puntos de interrupción
„ La barra de herramientas Depuración
„ Recorrer paso a paso el código
„ Demostración: cómo utilizar las ventanas de depuración
„ Cómo utilizar las ventanas de depuración
„ Cómo utilizar la Ventana de comandos
„ Práctica: código de depuración

Objetivos de la lección En esta lección, aprenderemos a:


„ Establecer, eliminar y modificar puntos de interrupción.
„ Recorrer el código utilizando los comandos Step y la sintaxis Ejecutar
hasta el Cursor.
„ Utilizar las siguientes ventanas para inspeccionar nuestro programa: la
ventana Automático, la ventana Pila de llamadas, la ventana Comandos, la
ventana Variables locales y la ventana Inspección.
Manejo de errores y excepciones 11

Demostración: Cómo depurar una aplicación

„ En esta demostración, aprenderemos


cómo depurar una aplicación utilizando
breakpoints, stepping through código por
líneas de y utilizando la ventan Watch para
examinar variables en código.

En esta demostración, aprenderemos cómo depurar una aplicación utilizando


puntos de interrupción, recorrer el código línea por línea y utilizando la ventana
Inspección para examinar variables en el código.
Iniciar Visual Studio .NET y cargar el proyecto de la demostración.
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 Página de inicio, en el panel de Inicio, hacer clic en Abrir proyecto.
3. En el cuadro de diálogo 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 aplicación
4. En la barra de herramientas, hacer clic en el botón Iniciar.
5. En la ventana Form1, hacer clic en Button1.
Se producirá una excepción no controlada de tipo
System.IndexOutOfRangeException.
6. En el cuadro de diálogo Microsoft Development Environment, hacer clic
en Break.
7. Mover el cursor del ratón sobre index en la línea de código 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 método GetLength devuelve
el número de elementos en la dimensión de una matriz. Debido a que las
matrices se numeran desde cero, el valor devuelto por el método GetLength
necesita reducirse en 1 para el bucle For…Next.

Ë Corregir el código y probar la aplicación de nuevo


1. En el menú Depurar, hacer clic en Detener depuración.
2. En el Editor de código de Form1.vb, añadir el código – 1 al final de la
siguiente línea:
For index = 0 to names.GetLength(0)

3. En la barra de herramientas, hacer clic en el botón Iniciar .


4. En el cuadro de diálogo Form1, hacer clic en Button1.
Observar que el cuadro de mensaje nos informa de que el nombre más 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 interrupción para depurar la aplicación


1. En el Editor de código de Form1.vb, hacer clic en el margen para añadir un
punto de interrupción a la siguiente línea de código:
For index = 0 To names.GetLength(0) – 1

2. En la barra de herramientas, hacer clic en el botón Iniciar .


3. En el cuadro de diálogo Form1, hacer clic en Button1.
Observar que la ejecución se detiene en la línea donde ha establecido el
punto de interrupción.
4. En la siguiente línea de código, hacer clic con el botón derecho en index y,
a continuación, hacer clic en Agregar inspección.
For index = 0 to names.GetLength(0) -1

Aparecerá una ventana Inspección debajo del Editor de código. El valor de


la variable index se muestra en esta ventana Inspección.
5. Hacer clic con el botón derecho en la variable maxLen, y hacer clic en
Agregar inspección.
Manejo de errores y excepciones 13

6. Hacer clic con el botón derecho en la variable longestName y, a


continuación, hacer clic en Agregar inspección.
7. En la siguiente línea de código, seleccionar names(index), hacer clic con el
botón derecho en el área seleccionada y, a continuación, hacer clic en
Agregar inspección.
If names(index).Length > maxLen then

8. Pulsar F8.
La flecha amarilla indica la línea de código que se ejecutará a continuación.
9. Pulsar F8.
Debido a que la longitud del nombre Brandon es mayor que el valor actual
de maxLen, la ejecución continúa en la siguiente línea.
10. Pulsar F8.
Observar que el nombre más largo (longestName) de la ventana Inspección
ahora contiene Brandon.
11. Pulsar F8.
12. Pulsar F8.
Observar que index se ha incrementado en 1. Sin embargo, la siguiente línea
que se ejecuta es la instrucción 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 más corto que Brandon, la ejecución continúa en
la siguiente línea. Esto se debe a que la variable maxLen no se ha
actualizado y todavía contiene 0. Éste es el error del código.
14. Detener la aplicación pulsando MAYÚSCULAS+F5.
15. Después de la instrucción de código
longestName = names(index)

añadir la siguiente línea de código:


maxLen = names(index).Length

16. Hacer clic en el marcador de punto de interrupción para eliminar el punto de


interrupción.
17. En la barra de herramientas, hacer clic en el botón Iniciar .
18. En el cuadro de diálogo Form1, hacer clic en Button1.
Ahora, el cuadro de mensaje informa correctamente de que el nombre más
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 interrupción?

„ Detiene la operación de una aplicación


„ En modo break, podemos:
z Step through nuestro código línea por línea
z Determinar los procedimientos activos que se han invocado
z Observar los valores de las variables, propiedades y
expresiones
z Utilizar ventanas de depuración para cambiar los valores de
variables y propiedades
z Cambiar el flujo del programa
z Ejecutar instrucciones de código

Introducción Cuando desarrollamos una aplicación en Visual Basic .NET, trabajamos


principalmente en dos modos: modo de diseño y modo de ejecución. En el
modo de diseño, creamos y modificamos código y podemos abordar errores de
sintaxis, pero no podemos realizar pruebas para detectar errores de tiempo de
ejecución y de lógica. En el modo de ejecución, podemos comprobar la
ejecución del programa y realizar pruebas para detectar errores de tiempo de
ejecución y de lógica, pero no podemos modificar el código. Un tercer modo (el
modo de interrupción) detiene la operación de una aplicación y ofrece una
imagen de su condición en cualquier momento. Entrar en el modo de
interrupción no finaliza la ejecución del programa. La ejecución puede
reanudarse en cualquier momento.
Únicamente podemos entrar modo de interrupción mientras estamos ejecutando
una versión de debug de la aplicación. No podemos entrar modo de interrupción
cuando estamos ejecutando una versión release de una aplicación.
Entrar en modo de Visual Basic entra en modo de interrupción cuando:
interrupción
„ Encuentra un punto de interrupción establecido en el código.
„ Encuentra una instrucción Stop en el código.
„ Se dispara una expresión de inspección que hayamos incluido.
„ Pulsamos las teclas CTRL+BREAK mientras estamos ejecutando una
versión debug de nuestro programa.
„ Hacemos clic en el botón Interrumpir todos de la barra de herramientas
Depurar mientras estamos ejecutando una versión debug de nuestro
programa.
„ Una instrucción de una línea de código genera un error de tiempo de
ejecución no atrapado y hacemos clic en Depurar en el cuadro de diálogo
que aparece.
„ Una instrucción Debug.Assert se evalúa en False.
Manejo de errores y excepciones 15

Estudiaremos más sobre la instrucción Debug.Assert más adelante en esta


unidad.
Uso del modo de Cuando estamos en modo de interrupción, el texto [interrumpir] aparece en la
interrupción barra de título de Visual Studio. La siguiente imagen de pantalla muestra una
aplicación denominada DebuggingApplication en modo de interrupción.

Mientras estamos en modo de interrupción, podemos:


„ Recorrer nuestro código línea a línea.
„ Determinar los procedimientos activos que se han invocado.
„ Observar los valores de variables, propiedades y expresiones.
„ Utilizar las ventanas de depuración para cambiar valores de variables y
propiedades.
„ Cambiar el flujo del programa.
„ Ejecutar instrucciones de código.

Uso del método Podemos entrar condicionalmente en modo de interrupción utilizando el


Debug.Assert método Debug.Assert. Este método utiliza una expresión booleana para
determinar si se entra en modo de interrupción. Se entra en el modo de
interrupción cuando la instrucción Debug.Assert se evalúa a False.
Para emplear el método Debug.Assert, utilizar la siguiente sintaxis:
Debug.Assert booleanexpression

En el siguiente código, la instrucción Debug.Assert hará que Visual Basic entre


en modo de interrupción 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 versión de debug de


16 Manejo de errores y excepciones

una aplicación. Cuando el código se compila utilizando una versión release, se


omiten las invocaciones a métodos de Debug.
Manejo de errores y excepciones 17

Cómo utilizar puntos de interrupción

„ Un breakpoint es un marcador en nuestro código que


hace que Visual Basic detenga la ejecución del código en
una línea específica
„ No podemos colocar breakpoints en código no ejecutable

Breakpoints
Breakpoints

Introducción Un punto de interrupción es un marcador en nuestro código que hace que


Visual Basic detenga la ejecución del código en una línea específica. En lugar
de recorrer nuestro código línea a línea o instrucción a instrucción, podemos
permitir que nuestro programa se ejecute hasta que encuentre un punto de
interrupción y empiece entonces la depuración.
Para detener nuestro programa en un lugar de nuestro código donde
sospechamos que existe un problema, establecemos un punto de interrupción en
ese lugar. Podemos establecer puntos de interrupción en tiempo de diseño o
durante una sesión de depuración.
Establecer un punto de Existen varias formas de establecer un punto de interrupción:
interrupción
„ Hacer clic en el margen izquierdo del Editor de código en la línea que
contiene la instrucción donde deseamos que se detenga el depurador.
„ Situar el cursor del ratón en la línea donde deseamos que se detenga el
depurador. Pulsar F9 para cambiar el punto de interrupción a activo o
inactivo.
„ Hacer clic con el botón derecho en la línea de código y, a continuación,
hacer clic en Insertar punto de interrupción en el menú de acceso directo.

Una vez establecido el punto de interrupción, aparecerá un símbolo circular (z)


en el margen izquierdo de la línea de código en la que se ha establecido el punto
de interrupción, y la línea de código aparece resaltada en el mismo color que el
punto de interrupción.
Cuando se llega al punto de interrupción en tiempo de ejecución, aparece un
indicador de ejecución en la línea que se ejecuta a continuación. Si lo deseamos,
18 Manejo de errores y excepciones

podemos mover este indicador a otra línea. La siguiente ilustración muestra el


indicador de ejecución.

Eliminar un punto de Existen varias formas de eliminar un punto de interrupción:


interrupción
„ Hacer clic en el símbolo del punto de interrupción (z) junto a la línea que
contiene el punto de interrupción, en el margen izquierdo del Editor de
código.
„ Situar el cursor en la línea en la que se ha establecido el punto de
interrupción y, a continuación, pulsar F9 para eliminar el punto de
interrupción.
„ Hacer clic con el botón derecho en la línea de código en la que se ha
establecido el punto de interrupción y, a continuación, hacer clic en
Deshabilitar punto de interrupción en el menú de acceso directo.

Nota Para eliminar todos los puntos de interrupción al mismo tiempo, hacer
clic en Borrar todos los puntos de interrupción en el menú Depurar.

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

Ë Abrir la ventana Puntos de interrupción


• En el menú Depurar, seleccionar Ventanas y, a continuación, hacer clic en
Puntos de interrupción.

La siguiente imagen de pantalla muestra la ventana Puntos de interrupción.

Nota Si se desea obtener más información sobre el uso de la ventana Puntos de


interrupción, consultar Uso de la ventana Puntos de interrupción en la
documentación de Visual Studio .NET.
Manejo de errores y excepciones 19

Cómo modificar puntos de interrupción

Propiedad
Propiedad
Condition
Condition

Propiedad
Propiedad
Hit
Hit Count
Count

Introducción Podemos establecer dos propiedades que modifiquen el comportamiento de un


punto de interrupción: la propiedad Condición y la propiedad Recuento de
visitas.
Uso de la propiedad Podemos utilizar el cuadro de diálogo Propiedades del punto de interrupción
Condición para establecer un punto de interrupción condicional. Una condición es una
expresión que determina si el depurador entrará en modo de interrupción
cuando llegue al punto de interrupción. Cuando el depurador llegue al punto de
interrupción, evaluará la condición y cambiará a modo de interrupción sólo si
ésta se cumple.
Establecer la propiedad
Condición
Ë Establecer la propiedad Condición para un punto de interrupción
1. En el menú Depurar, seleccionar Ventanas y, a continuación, hacer clic en
Puntos de interrupción.
2. Abrir el cuadro de diálogo Propiedades del punto de interrupción
haciendo clic en el punto de interrupción adecuado de la ventana Puntos de
interrupción y hacer clic en Propiedades en la barra de herramientas de
la ventana Puntos de interrupción.
3. En el cuadro de diálogo Propiedades del punto de interrupción, hacer clic
en Condición.
4. Escribir la expresión que desea que evalúe el depurador.
5. Especificar cómo debe satisfacerse la condición escogiendo uno de los
siguientes:
a. Cuando la expresión es true.
b. Cuando el valor de la expresión cambia (hacer clic en ha cambiado en
el cuadro de diálogo Condición de punto de interrupción).
Cuando establecemos una condición de punto de interrupción que evalúa
si una expresión ha cambiado, el depurador no se detiene la primera vez
que se llega al punto de interrupción. La expresión se evalúa 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 Por ejemplo, supongamos que estamos depurando un programa financiero en el
propiedad Condición que no está permitido que el saldo de la cuenta sea menor que cero. Podríamos
establecer puntos de interrupción en determinados lugares del código y asignar
la condición accountBalance < 0 a cada uno.
Cuando ejecutamos el programa, la ejecución se interrumpirá en los puntos de
interrupción sólo cuando la variable accountBalance sea menor que cero.
Podemos examinar el estado del programa y las variables en el primer lugar del
punto de interrupción, y continuar la ejecución hasta el segundo lugar de punto
de interrupción, etc. La siguiente imagen de pantalla muestra cómo se
establecería la propiedad Condición del punto de interrupción para el escenario
anterior.

Uso de la propiedad De modo predeterminado, el depurador detiene la ejecución del código cada vez
Recuento de visitas que se llega a un punto de interrupción. No obstante, algunos errores no
aparecen la primera vez que nuestro programa ejecuta un bucle, invoca una
función o accede a una variable. Por ello, es posible que deseemos detener la
ejecución sólo cuando se haya llegado al punto de interrupción un número
específico de veces. Este número se denomina recuento de visitas. Podemos
utilizar la propiedad Recuento de visitas para especificar cuántas veces se
alcanza el punto de interrupción antes de que el depurador detenga su ejecución.
Establecer la propiedad
Recuento de visitas
Ë Establecer la propiedad Recuento de visitas de un punto de
interrupción
6. En el menú Depurar, seleccionar Ventanas y, a continuación, hacer clic en
Puntos de interrupción.
7. Abrir el cuadro de diálogo Propiedades del punto de interrupción
seleccionando el punto de interrupción adecuado en la ventana Puntos de
interrupción y haciendo clic en Propiedades en la barra de
herramientas de la ventana Puntos de interrupción.
8. En el cuadro de diálogo Propiedades del punto de interrupción, hacer clic
en Recuento de visitas.
9. En el cuadro de diálogo Recuento de visitas al punto de interrupción, en
el cuadro Cuando el punto de interrupción 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 múltiplo de


d. interrumpir cuando el recuento de visitas es mayor o igual a
10. Introduzca el valor del recuento de visitas adecuado y, a continuación, hacer
clic en Aceptar.
Ejemplo de uso de la En el siguiente ejemplo, el recuento de visitas se ha establecido en 3. La
propiedad Recuento de ejecución se detendrá la tercera vez que se alcance el punto de interrupción. Si
visitas ha establecido una propiedad Condición, la ejecución se detendrá la tercera vez
que se alcance el punto de interrupción según esa condición.
22 Manejo de errores y excepciones

La barra de herramientas Depurar

Stop
Stop Show
Show Next
Next Hexadecimal
Hexadecimal
Start
Start Step
Step Over
Over
Debugging
Debugging Statement
Statement Display
Display

Break
Break All
All Restart
Restart Step
Step Into
Into Step
Step Out
Out Breakpoints
Breakpoints

Introducción Después de que la ejecución de su programa se haya detenido cerca de un punto


donde pensamos que existe un problema, podemos utilizar las herramientas de
depuración que proporciona Visual Basic para investigar el problema. La barra
de herramientas Depurar ofrece un acceso rápido a varias de las características
de depuración más utilizadas.
La barra de Si la barra de herramientas Depurar no está visible, hacer clic con el botón
herramientas Depurar derecho en cualquier barra de herramientas en modo de diseño o interrupción y,
a continuación, hacer clic en Depurar. La siguiente tabla describe los botones
de la barra de herramientas que utilizaremos con mayor frecuencia.
Nombre del botón Acceso directo Descripción
predeterminado

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


la pestaña General del cuadro de diálogo Páginas de propiedades. En modo de
interrupción, el texto del la sugerencia del botón Iniciar cambia a Continuar.
Interrumpir todos CTRL+ALT+BRE Detiene la ejecución de todos los programas que se ejecutarán bajo el depurador.
AK Los programas no se cierran y podemos reanudar su ejecución cuando deseemos.
Detener depuración Detiene la ejecución del programa y regresa al modo de diseño.
Paso a paso por F8 Ejecuta la siguiente línea de código ejecutable, yendo paso a paso por cada una
instrucciones de las líneas de código siguientes. Si el código invoca otro procedimiento, Paso
a paso por instrucciones se ejecuta paso a paso por cada línea de ese
procedimiento.
Paso a paso por MAYS+F8 Ejecuta la siguiente línea de código ejecutable, yendo paso a paso por cada una
procedimientos de las líneas de código siguientes. Si el código invoca otro procedimiento, ese
procedimiento se ejecuta completamente antes de ir paso a paso por la siguiente
línea de código del primer procedimiento.
Paso a paso para salir CTRL+MAYS+F8 Ejecuta el resto del procedimiento actual y se interrumpe en la siguiente línea
del procedimiento de llamada.
Puntos de CTRL+B Abre la ventana Puntos de interrupción.
interrupción
Manejo de errores y excepciones 23

Cómo recorrer el código

„ Step into o step over: ejecuta la línea de código


siguiente. Si la línea siguiente contiene una invocación
de procedimiento:
z Step into: únicamente ejecuta la invocación, y se detiene
en la primera línea de código dentro del procedimiento
z Step over: ejecuta el procedimiento, y se detiene en la
primera línea de código fuera del procedimiento
„ Step out: reanuda la ejecución hasta que regresa el
procedimiento y, a continuación, se interrumpe en el
punto de regreso del procedimiento de llamada
„ Run To Cursor: el depurador ejecuta nuestra aplicación
hasta llegar al punto de inserción que hemos establecido

Introducción Uno de los procedimientos de depuración más habituales es recorrer paso a


paso el código, o ejecutar las líneas del código una por una. El menú Depurar
proporciona tres comandos para recorrer paso a paso el código: Paso a paso
por instrucciones, Paso a paso por procedimientos y Paso a paso para salir.
Además, el comando Ejecutar hasta el cursor nos permite ejecutar nuestra
aplicación hasta que el depurador llega al punto de inserción que hemos
establecido. Podremos ir paso a paso por nuestro código desde ese punto.

Nota No podemos acceder a los comandos Step si nuestra aplicación se está


ejecutando. Los comandos Step únicamente son válidos en modo de
interrupción o antes de iniciar la aplicación.

Uso de Paso a paso por Tanto Paso a paso por instrucciones como Paso a paso por procedimientos
instrucciones y Paso a ordenan al depurador que ejecute la siguiente línea de código. Estos comandos
paso por sólo se diferencian en un aspecto: la forma en que controlan las invocaciones a
procedimientos procedimientos.
Si la línea contiene una invocación a un procedimiento:
„ Paso a paso por instrucciones únicamente ejecuta la invocación, y se
detiene en la primera línea de código dentro del procedimiento.
„ Paso a paso por procedimientos ejecuta todo el procedimiento, y se
detiene en la primera línea de código fuera del procedimiento.

Utilizar Paso a paso por instrucciones si se desea ver la invocación 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 Utilizar Paso a paso para salir cuando nos encontremos dentro de la
salir invocación a un procedimiento y se desee regresar al procedimiento de llamada.
Paso a paso para salir reanuda la ejecución de código hasta el retorno del
procedimiento, y se interrumpe en el punto de retorno del procedimiento de
llamada.
Uso de Ejecutar hasta el Podemos utilizar el comando Ejecutar hasta el cursor para ordenar al
cursor depurador que ejecute nuestra aplicación hasta alcanzar el punto de inserción
que hemos establecido haciendo clic en el Editor de código con el ratón. El
comando Ejecutar hasta el cursor no está disponible en el menú Depurar.
Para ejecutar este comando, hacer clic con el botón derecho en la ventana
fuente y, a continuación, hacer clic en Ejecutar hasta el cursor en el menú de
acceso directo.
Iniciar la acción de ir Para iniciar la depuración de una aplicación, podemos utilizar Iniciar, Paso a
paso a paso por el paso por instrucciones, Paso a paso por procedimientos o Ejecutar hasta el
código cursor.
„ Si hacemos clic en Iniciar, nuestra aplicación se iniciará y se ejecutará hasta
llegar a un punto de interrupción. Podemos interrumpir la ejecución 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 aplicación se interrumpirá en la primera línea de
código ejecutable.
„ Si hacemos clic en Ejecutar hasta el cursor, nuestra aplicación se iniciará
y se ejecutará hasta llegar a un punto de interrupción o al lugar del punto de
inserción, lo que ocurra antes. En algunos casos, no se produce una
interrupción. Esto significa que la ejecución no llega en ningún momento a
la línea de código en la que se ha establecido el punto de inserción.
Manejo de errores y excepciones 25

Demostración: Cómo utilizar las ventanas de depuración

„ En esta demostración, aprenderemos a


depurar una aplicación utilizando:
z Las ventanas Autos, Locals, Watch, y
Command
z Breakpoints
z El comando Run To Cursor

En esta demostración, aprenderemos a depurar una aplicación utilizando las


ventanas Automático, Variables locales, Inspección y Comandos, Puntos de
interrupción, y el comando Ejecutar hasta el cursor.

Ë Iniciar Visual Studio .NET y cargar el proyecto de la demostración


1. Hacer clic en Inicio, seleccionar Todos los programas, seleccionar
Microsoft Visual Studio .NET y, a continuación, hacer clic en Microsoft
Visual Studio .NET.
2. En la Página de inicio, en el panel de Inicio, hacer clic en Abrir proyecto.
3. En el cuadro de diálogo 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 botón derecho en
Form1.vb y, a continuación, hacer clic en Ver código.
2. En el Editor de código, en el código del evento Form1_Load, hacer clic con
el botón derecho en la siguiente línea y, a continuación, clic en Ejecutar
hasta el cursor.
names(0)= "Brandon"

Observar que se inicia la aplicación, y la ejecución se detiene en la línea


especificada.

Ë Uso de la ventana Automático


1. Examine la ventana Automático. Si esta ventana no está visible, hacer clic
en el menú Depurar, seleccionar Ventana y, a continuación, hacer clic en
Automático.
Observar que la matriz names se encuentra vacía.
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 Automático muestra las variables de código de la instrucción
actual y el código de la instrucción 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 continuación,
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 Inspección


4. Examinar la ventana Inspección 1. Si esta ventana no está visible, hacer clic
en el menú Depurar, seleccionar Ventanas, seleccionar Inspección y, a
continuación, hacer clic en Inspección 1.
5. En el Editor de código, hacer clic con el botón derecho en names(0) y, a
continuación, hacer clic en Agregar inspección.
Las ventanas de inspección nos permiten crear nuestra propia lista
personalizada de las variables que deseamos monitorizar mientras se ejecuta
el código.
6. En el Editor de código de Form1.vb, en la función Sub Button1_Click,
hacer clic con el botón derecho en maxLen y, a continuación, hacer clic en
Agregar inspección.
Observar que el valor maxLen se muestra como Nombre 'maxLen' no está
declarado. Esto se debe a que el código que declara maxLen no se ha
ejecutado todavía.
7. En el Editor de código de Form1.vb, en la función Sub Button1_Click,
hacer clic con el botón derecho en la instrucción For y, a continuación,
hacer clic en Ejecutar hasta el cursor.
8. En el cuadro de diálogo Form1, hacer clic en Button1.
La ejecución se detiene en la instrucción For en el código del evento
Button1_Click. Examine la ventana Inspección 1 y observar que el valor
de maxLen ahora es 0. Observar también, 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 están en rojo porque han cambiado desde
la última vez que la aplicación se depuró.

Ë Uso de puntos de interrupción y de la ventana Comandos


Manejo de errores y excepciones 27

1. En el Editor de código de Form1.vb, en la función Sub Button1_Click,


hacer clic con el botón derecho en la siguiente línea de código y, a
continuación, hacer clic en Insertar punto de interrupción.
If names(index).Length > maxLen Then

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


interrupción.
3. En la ventana Puntos de interrupción, hacer clic con el botón derecho en la
entrada de punto de interrupción y hacer clic en Propiedades.
4. En la ventana Propiedades de punto de interrupción, en la ficha Archivo,
hacer clic en Condición.
Las condiciones le permiten detener la ejecución en la línea del punto de
interrupción cuando se cumple una determinada condición.
5. En la ventana Condición de punto de interrupción, en Condición, escribir
index=3 y hacer clic en Aceptar.
6. En la ventana Propiedades de puntos de interrupción, hacer clic en
Aceptar.
7. Hacer clic en el botón Continuar de la barra de herramientas.
La ejecución se detiene en la línea del punto de interrupción.
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 menús. Podemos utilizar el modo Inmediato cuando
depuramos una aplicación. 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 interrupción 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 botón Continuar de la barra de herramientas.
Observar que el cuadro de mensaje ahora informa de que Christopher es el
nombre más 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

Cómo utilizar las ventanas de depuración

Ventana
Ventana Utilice
Utilice esta
esta ventana
ventana para…
para…
para…
Ver
Ver variables
variables en
enla
lainstrucción
instrucciónactual
actual yytres
tres
Autos
Autos instrucciones
instrucciones antes
antes yydespués
despuésdedela
lainstrucción
instrucción
actual
actual

Ver
Ver elel histórico
históricode
dellamadas
llamadas aala
lalínea
líneade
decódigo
código
Call
CallStack
Stack que
queseseestáestádepurando
depurando

Locals
Locals Ver
Ver yymodificar
modificarvariables
variableslocales
locales

ƒƒCrear
Crear una
unalista
listapersonalizada
personalizada de
devariables
variables yy
Watch
Watch expresiones
expresionesquequemonitorizar
monitorizar
ƒƒVer
Ver yymanipular
manipular cualquier
cualquierexpresión
expresiónwatch
watch

Introducción El depurador de Visual Studio .NET dispone de diversas ventanas que nos
permiten inspeccionar nuestro programa en detalle y modificar su estado. Las
ventanas Automático, Pila de llamadas, Variables locales e Inspección son las
ventanas de depuración que probablemente más utilizaremos.
Uso de la ventana Podemos utilizar la ventana Automático para visualizar variables en la
Automático instrucción actual y tres instrucciones anteriores y posteriores a la instrucción
actual. La instrucción actual es la instrucción en el lugar de ejecución actual (la
instrucción que se ejecutará a continuación si la ejecución continúa). También
podemos utilizar la ventana Automático 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 continuación, hacer clic en
Automático.
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 Podemos utilizar la ventana Pila de llamadas para ver el histórico de llamadas
de llamadas de la línea de código que se está depurando, incluyendo cualquier tipo de
parámetros y valores de parámetros. Se denomina pila de llamadas (call stack)
a la serie de procedimientos invocados dentro de una aplicación.

Ë Ver el código fuente de un procedimiento en la pila de llamadas


1. En el menú Depurar, seleccionar Ventanas y, a continuación, hacer clic en
Pila de llamadas.
2. En la ventana Pila de llamadas, hacer clic con el botón derecho en el
procedimiento cuyo código fuente desea ver y, a continuación, hacer clic en
Ir a código 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 programación en el que está escrito. El nombre del procedimiento
puede estar acompañado de información opcional, como el nombre del módulo,
número de línea, byte offset y nombres, tipos y valores de parámetros. La
visualización de esta información opcional puede activarse o desactivarse.

Ë Cambiar la información opcional mostrada en la ventana Pila de


llamadas
1. En el menú Depurar, seleccionar Ventanas y, a continuación, hacer clic en
Pila de llamadas.
2. Hacer clic con el botón derecho en la ventana Pila de llamadas y
seleccionar o deseleccionar Mostrar la información deseada en el menú de
acceso directo.

Uso de la ventana Podemos utilizar la ventana Variables locales para visualizar y modificar
Variables locales variables locales al contexto actual. Esta ventana proporciona información
explícita sobre objetos, como información sobre herencia.

Ë Modificar el valor de una variable utilizando la ventana Variables


locales
1. En el menú Depurar, seleccionar Ventanas y, a continuación, 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 específicas. Para monitorizar únicamente las variables que
especifiquemos, es mejor utilizar la ventana Inspección.
Uso de la ventana Podemos utilizar la ventana Inspección para crear nuestra propia lista
Inspección personalizada de variables o expresiones a monitorizar mientras el código se
ejecuta. Podemos ver y manipular cualquier expresión a inspeccionar en la
ventana Inspección.

Ë Agregar una variable a la ventana Inspección


• Hacer clic con el botón derecho en la variable del Editor de código y, a
continuación, hacer clic en Agregar inspección.

Ë Evaluar una variable o expresión utilizando la ventana Inspección


1. En el menú Depurar, seleccionar Ventanas, hacer clic en Inspección y, a
continuación, en Inspección 1.
2. En la ventana Inspección, hacer clic en una fila vacía en la columna
Nombre.
3. Escribir o pegar la variable o expresión 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 más
(+) o menos (-) en la columna Nombre para expandir o colapsar la variable.
30 Manejo de errores y excepciones

5. La expresión permanecerá en la ventana Inspección hasta que la


eliminemos.

¿Ventana Inspección o El depurador de Visual Studio .NET proporciona un cuadro de diálogo modal
cuadro de diálogo denominado Inspección rápida que ofrece una forma rápida de evaluar o
Inspección rápida? modificar una sola variable o expresión. Debido a que Inspección rápida es
modal, no podemos dejarlo abierto para inspeccionar una variable o expresión
mientras vamos recorriendo nuestro programa. Si deseamos inspeccionar una
variable o expresión mientras recorremos nuestro programa, agregaremos esa
variable o expresión a la ventana Inspección. No obstante, si simplemente
deseamos realizar un cálculo rápido que implique una o más variables, podemos
utilizar Inspección rápida.

Ë Manipular una variable utilizando Inspección rápida


• En modo de interrupción, en una ventana fuente, hacer clic con el botón
derecho en un nombre de variable y clic en Inspección rápida en el menú
de acceso directo. De ese modo, la variable se ubicará automáticamente en
el cuadro de diálogo Inspección rápida.
Manejo de errores y excepciones 31

Cómo utilizar la Ventana de comandos

„ Utilice la ventana Comando para:


z Issue comandos (modo Comando)
z Depurar y evaluar expresiones (modo Inmediato)

Tarea
Tarea Solució
Solución
Solución Ejemplo
Ejemplo
Encabezar
Encabezarlalaexpresión
expresióncon
conun
un
Evaluar
Evaluarexpresiones
expresiones signo ?myVariable
?myVariable
signode
deinterrogación
interrogación(?)
(?)

Cambiar
Cambiaraamodo
modoInmediato
Inmediato Escribir
Escribirimmed
immeden enlalaventana,
ventana,sin
sin
elelsigno immed
immed
desde
desdemodo
modoComando
Comando signomayor
mayor que
que(>)(>)

Regresar
Regresaraamodo
modoComando
Comando Escribir
Escribir>cmd
>cmden
enlalaventana
ventana >cmd
>cmd
desde
desdemodo
modoInmediato
Inmediato
Entrar
Entrartemporalmente
temporalmenteen
enmodo
modo Escribir
Escribirelelcomando,
comando,precedido
precedidodel
del >alias
>alias
Comando
Comandodesde
desdemodo
modo signo
Inmediato signomayor
mayorque que(>)
(>)
Inmediato

Introducción La Ventana de comandos no es una ventana de depuración, pero puede


resultar útil en la depuración del código. 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 continuación, hacer clic
en Ventana de comandos.

La siguiente tabla describe varios comandos que podemos utilizar en la


Ventana de comandos.
Tarea Solución Ejemplo
Evaluar expresiones Encabezar la expresión con un ?miVariable
signo de interrogación (?)
Cambiar a modo Inmediato Escribir immed en la ventana, immed
desde modo Comando sin el signo mayor que (>)
Regresar a modo Comando Escribir >cmd en la ventana >cmd
desde modo Inmediato
Entrar temporalmente en Escribir el comando en la >alias
modo Comando mientras ventana, precedido del signo
estamos en modo Inmediato mayor que (>)
(para ejecutar un comando)

Nota 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.
32 Manejo de errores y excepciones

Práctica: Código de depuración

Examine el código en el controlador


de eventos Click

Genere y ejecute la aplicación

Utilice las herramientas de depuración


para localizar el error lógico

Proponga una forma de solucionar el


error

En esta práctica, trabajaremos el proceso de depurar una aplicación sencilla.


Para localizar el error lógico de un programa, estableceremos un punto de
interrupción, recorreremos el código y utilizaremos la ventana de comandos
para comprobar los valores almacenados en las variables mientras nuestro
código se ejecuta en modo de interrupción. Sugeriremos cómo podría
solucionarse el error lógico, e implementaremos una posible solución para el
error.

Ë Abrir el proyecto
• Abrir el proyecto DebugApplication.sln, que se encuentra en la carpeta
Starter dentro del fichero practs08.zip.
Esta aplicación calcula el número de palabras de una frase. El usuario
escribe una frase en un cuadro de texto de un formulario y hace clic en un
botón; a continuación, aparece un cuadro de mensaje informando al usuario
de cuantas palabras contiene la frase que se ha escrito.
La siguiente imagen muestra la aplicación 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
código para entender cómo se ha generado la aplicación para que responda a
las funcionalidades previstas.
Responder a las siguientes preguntas sobre el código.
a. Observar las declaraciones de la variable. ¿Cómo se asignará su valor a
la variable sentence? ¿Para qué se utiliza la función Trim?
La cadena introducida por el usuario en InputTextBox se asignará a
la variable sentence. La función Trim elimina los espacios al
principio y al final de la cadena.
_________________________________________________________

_________________________________________________________

b. Explicar el funcionamiento del código que asigna inicialmente un valor a


location. Observar que el término Chr(32) en la declaración constante
para spaceDelimeter hace referencia al carácter de espacio en blanco.
La función InStr buscará un carácter de espacio en la cadena de la
frase, empezando por el primer carácter. Si encuentra un carácter
de espacio, asignará la posición del carácter a location. Si no
encuentra un carácter de espacio, la función devolverá un valor 0.
_________________________________________________________

_________________________________________________________

c. ¿Qué condición impedirá que el bucle While se repita?


Si no hay ningún carácter de espacio, el valor de location será 0.
Cuando el valor de location es 0, el código del bloque While no se
ejecuta. La ejecución del código seguirá hasta el bloque If…Then.
_________________________________________________________

_________________________________________________________

d. ¿Para qué se utiliza la variable wordCount?


La variable wordCount almacena el número total de palabras de la
frase.
_________________________________________________________

_________________________________________________________

e. ¿Para qué se asigna un nuevo valor a location en el bucle While? ¿Por


qué la asignación de ubicación utilizando la función InStr sucede de
nuevo?
Después de que cada espacio haya sido encontrado, es necesario
ejecutar una búsqueda de más espacios. Este código busca
incidencias adicionales del carácter de espacio más allá de cualquier
incidencia que ya se haya contado.
_________________________________________________________

_________________________________________________________
34 Manejo de errores y excepciones

f. Describir el flujo de código que podríamos esperar si un usuario


escribiera la palabra “Test” sin espacios en InputTextBox. ¿Qué valor
devolvería 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 ejecución de código pasará
al bloque de código If…Then. La longitud de sentence no es igual a
0, por tanto, wordCount se incrementará de 0 a 1 en el bloque
If…Then. El cuadro de mensaje mostrará el mensaje “Total number
of words 1.”
__________________________________________________________

__________________________________________________________

g. Describir el flujo de código que podríamos esperar si un usuario


escribiera las palabras “Test Me” en InputTextBox. ¿Qué valor
devolvería el cuadro de mensaje?
Debido a que hay un espacio en la posición 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 ejecución del código
pasará al bloque de código If…Then. La longitud de sentence no es
igual a 0, por tanto, wordCount se incrementará de 1 a 2 en el bloque
If…Then. El cuadro de mensaje mostrará el mensaje “Total number
of words 2.”
__________________________________________________________

__________________________________________________________

Nota Comprobar las respuestas antes de continuar con la práctica. 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, también podemos
establecer un punto de interrupción al principio del bucle While y utilizar el
comando Paso a paso por instrucciones (F8) para movernos paso a paso por el
código.
Manejo de errores y excepciones 35

Ë Generar y ejecutar la aplicación


1. Ejecutar la aplicación en modo de depuración.
2. En el cuadro Enter a sentence, escribir la palabra Test y hacer clic en Total
Words. El cuadro de mensaje debería mostrar 1, el número 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 debería mostrar 2, el número correcto
de palabras de la frase. Hacer clic en OK.
4. Modificar la frase existente en el cuadro Enter a sentence añadiendo
espacios entre las dos palabras.
5. Hacer clic en Total Words. Aparecerá un número incorrecto de palabras en
el cuadro de mensaje. Hacer clic en OK.

Ë Localizar el código que provoca el error


1. Para localizar el error lógico de esta aplicación, 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 depuración podríamos utilizar para localizar el


código que causa el error?
Respuesta posible: establecer un punto de interrupción en el
controlador de eventos, ejecutar la aplicación y utilizar el comando
Paso a paso por instrucciones para recorrer paso a paso las líneas
del código una a una. Utilizar la ventana Automático para examinar
los valores de la variable y determinar cuándo ocurre el error.
_________________________________________________________

_________________________________________________________

2. En el controlador de eventos NumberOfWords_Click, en la línea de


código que inicia el bucle While, establecer un punto de interrupción.
3. Ejecutar la aplicación. En el cuadro Enter a sentence, escribir Test Me
con espacios adicionales entre las dos palabras y, a continuación, hacer clic
en el botón Total Words.
36 Manejo de errores y excepciones

4. Utilizar el comando Paso a paso por instrucciones (F8) para recorrer paso
a paso las líneas del código. A medida que recorremos el código, utilizar la
ventana Automático para examinar los valores de la variable y determinar
cuándo ocurre el error.
Puede utilizar las siguientes preguntas como ayuda para localizar el error
lógico:
a. ¿Cuál es el valor de location durante la primera repetición del bucle
While?
5.
__________________________________________________________

__________________________________________________________

b. ¿Incrementa el valor de wordCount adecuadamente después de que se


encuentre el primer espacio?
Sí.
__________________________________________________________

__________________________________________________________

c. ¿Cuál es el valor de location cuando el valor de wordCount cambia a 2?


6.
__________________________________________________________

__________________________________________________________

d. ¿Cuántas palabras se han contado realmente si el valor actual de location


es 6?
Una.
__________________________________________________________

__________________________________________________________

e. Describir el problema de este código y proponer una forma para corregir


el error.
El código del bucle While utiliza la presencia de un carácter de
espacio en la cadena sentence como indicativo de que hay una
palabra que debe contarse. Esta lógica no tiene en cuenta la posible
presencia de dos o más 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 lógico


Una forma de solucionar el problema de este código es eliminar cada palabra
después de que sea contada y, a continuación, eliminar los espacios desde el
principio de la cadena restante.
La variable sentence es un tipo de datos String, y proporciona el método
Remove para eliminar caracteres de una cadena. El siguiente código muestra
cómo utilizar el método Remove y la función LTrim para solucionar el error:
sentence = LTrim(sentence.Remove(0, location))

Debido a que eliminamos una palabra de la cadena con el código anterior,


también necesitamos modificar la invocación a la función InStr del bucle
While y establecer la posición de inicio en 1 cada vez que el código se ejecute.
• Corregir el código del controlador de eventos NumberOfWords_Click. El
código corregido debería ser similar al siguiente:
While location < > 0
wordCount += 1
sentence = LTrim(sentence.Remove(0, location))
location = InStr(1, sentence, spaceDelimeter)
End While

Ë Probar la aplicación
• Ejecutar y probar la aplicación en modo de depuración.

Archivos de solución Los archivos de solución se encuentran en la carpeta Solution dentro del fichero
practs08.zip.
38 Manejo de errores y excepciones

Lección: Gestión de excepciones

„ La clase Exception
„ ¿Qué es la gestión estructurada de excepciones?
„ Cómo utilizar la instrucción Try…Catch
„ Cómo utilizar el bloque Finally
„ Cómo lanzar excepciones
„ Directrices para el uso de la gestión estructurada de
excepciones

Introducción Visual Basic soporta la gestión estructurada de excepciones. La gestión


estructurada de excepciones proporciona una forma de controlar los errores que
puedan producirse en un bloque de código, permitiendo al mismo tiempo que
nuestra aplicación se ejecute. Con el uso de la gestión estructurada de
excepciones en nuestra aplicación, podemos prever errores potenciales e
impedir que interfieran en el uso previsto de nuestra aplicación.
En esta lección, estudiaremos cómo implementar la gestión estructurada de
excepciones en Visual Basic .NET, y cuándo utilizar este método de gestión de
errores.
Estructura de la lección Esta lección incluye los siguientes temas y actividades:
„ La clase Exception
„ ¿Qué es la gestión estructurada de excepciones?
„ Cómo utilizar la instrucción Try…Catch
„ Cómo utilizar el bloque Finally
„ Cómo lanzar excepciones
„ Directrices para el uso de la gestión estructurada de excepciones
„ Demostración: uso de la gestión estructurada de excepciones

Objetivos de la lección En esta lección, aprenderemos a:


„ Explicar la utilidad de la gestión estructurada de excepciones.
„ Crear y utilizar bloques Try…Catch…Finally.
„ Lanzar excepciones.
Manejo de errores y excepciones 39

La clase Exception
„ El .NET Framework proporciona el siguiente modelo de objeto de
excepciones:
Exception
Exception
SystemException
SystemException
OutOfMemoryException
OutOfMemoryException
IOException
IOException
FileNotFoundException
FileNotFoundException
ApplicationException
ApplicationException

„ Las clases Exception permiten recuperar información sobre cualquier


excepción que encontremos
„ Las propiedades de la clase base Exception permiten analizar
excepciones
z Principales propiedades: StackTrace, Message, HelpLink, Source

¿Qué es una excepción? Una excepción es cualquier condición de error o comportamiento imprevisto
que se produce durante la ejecución de un programa y requiere la ejecución de
código fuera del flujo de control normal. Las excepciones pueden provocarse
por un fallo de nuestro código o de código invocado, porque los recursos del
sistema operativo no estén disponibles, por condiciones imprevistas que
encuentre el CLR, etc. Una excepción se lanza (en otras palabras, se origina)
desde el área del código donde se ha producido un problema.
La clase Exception En el .NET Framework, el entorno de ejecución crea un objeto que representa
una excepción cuándo é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 información sobre excepciones de un
modo significativo y nos permiten recuperar información sobre cualquier
excepción que encontremos. Esta información nos ayuda a depurar eficazmente
nuestras aplicaciones.
La siguiente tabla describe algunas propiedades de la clase base Exception que
nos ayudarán a identificar la localización del código, tipo y causa de una
excepción. Cualquier excepción que herede de la clase base proporcionará estas
propiedades.
Propiedad Descripción

StackTrace Ofrece una lista de los métodos invocados que conducen a la excepción,
ayudándonos a encontrar en qué parte del código se produce el error.
Message Devuelve un mensaje de texto que describe el error. Utilizar esta propiedad para
recuperar información acerca de porqué se ha lanzado una excepción.
Podemos cambiar el texto para que un mensaje críptico sea más fácil 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 excepción.
40 Manejo de errores y excepciones

¿Qué es la gestión estructurada de excepciones?

„ Detecta y responde a errores mientras se ejecuta una


aplicación
„ Utiliza Try…Catch…Finally para encapsular y proteger
bloques de código que podrían provocar errores
z Cada bloque tiene uno o más controladores asociados
z Cada controlador especifica alguna forma de condición
de filtro en el tipo de excepción que controla
„ Ventajas:
z Permite la separación entre la lógica y el código de
gestión de errores
z Facilita la lectura, depuración y mantenimiento del código

Introducción La gestión estructurada de excepciones es código diseñado para detectar y


responder a errores durante la ejecución combinando una estructura de control
(similar a Select Case o While) con excepciones, bloques de código protegidos
y filtros.
Consecuencias de no Si se produce una excepción en un método no preparado para gestionarla, la
gestionar las excepción se propaga hacia el método invocador. Si no se gestiona en el método
excepciones que origina la llamada, la búsqueda de un controlador continúa hasta la pila de
llamadas. Si no existe un controlador para la excepción, aparecerá un mensaje
de error y la aplicación se cerrará.
Uso de la gestión Utilizando la instrucción Try…Catch…Finally, podemos proteger bloques de
estructurada de código que potencialmente podrían provocar errores.
excepciones
El bloque Try incluye una expresión que podría generar una excepción. El
bloque Try tiene una o más instrucciones Catch asociadas, que filtran
excepciones y las asocian con una determinada acción. Si se produce la
excepción, el entorno de ejecución detiene la ejecución normal e inicia la
búsqueda de un bloque Catch que pueda capturar la excepción, basándose en su
tipo.
„ Si no se encuentra un bloque Catch apropiado en el procedimiento
inmediato, el entorno de ejecución continúa por la pila de llamadas
buscando el procedimiento que originó la llamada.
„ Si no se encuentra un bloque Catch apropiado allí, el entorno de ejecución
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
excepción, y la ejecución se reinicia, empezando con el cuerpo del bloque
Catch.
„ Si no se encuentra ningún bloque Catch, aparecerá un mensaje de error y la
aplicación 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 lógicas principales. De esto modo, se facilita la
lectura y depuración del programa.
42 Manejo de errores y excepciones

Cómo utilizar la instrucción Try…Catch

„ Ponga código que podría lanzar excepciones en un


bloque Try
„ Gestione las excepciones en otro bloque Catch
Try
Try
fs
fs == New
New FileStream("data.txt",
FileStream("data.txt", __ Program
Program Logic
Logic
FileMode.Open)
FileMode.Open)
Catch
Catch ex
ex As
As FileNotFoundException
FileNotFoundException
MessageBox.Show("File
MessageBox.Show("File not
not found")
found") Exception
Exception Handling
Handling
Catch
Catch ex
ex As
As Exception
Exception
MessageBox.Show(ex.Message)
MessageBox.Show(ex.Message)
End
End Try
Try

Sintaxis Podemos implementar la gestión estructurada de excepciones en Visual Basic


.NET utilizando la instrucción Try…Catch. El siguiente código muestra la
estructura de una instrucción Try…Catch 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

Dónde ubicar el código El bloque Try de un controlador de excepciones Try...Catch contiene la


sección de código que deseamos que nuestro controlador de excepciones
monitorice. Es conveniente ubicar las secciones de código que podrían lanzar
excepciones en un bloque Try y el código que controla las excepciones en un
bloque Catch.
Cómo se procesa la El código del bloque Try siempre se ejecuta. Si se produce un error durante la
instrucción Try…Catch ejecución de cualquier parte del código de la sección Try, Visual Basic
examina cada instrucción Catch del controlador de excepciones hasta que
concuerda el tipo de excepción que se ha producido con el nombre de la
excepción especificado en la instrucción Catch y transfiere el control a la
primera línea de código de la instrucción Catch. Si no se encuentra un bloque
Catch apropiado, se produce un error.

Importante Las instrucciones Catch se procesan en orden; por ello, es


importante el orden en que escribimos nuestras instrucciones Catch.
Deberíamos poner los bloques Catch destinados a excepciones específicas
antes de un bloque Catch de una excepción general.
Manejo de errores y excepciones 43

Ejemplo de uso de El siguiente código proporciona un ejemplo sencillo de un controlador de


Try…Catch excepciones estructurado. En este ejemplo, se ejecuta el bloque Try. Si se
produce un error FileNotFoundException, se ejecutará el código del primer
bloque Catch. Para el resto de errores, se ejecutará el código del segundo
bloque Catch.
Observemos que en el primer bloque Catch buscamos errores específicos. El
segundo bloque Catch está diseñado 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

Cómo utilizar el bloque Finally

„ Sección opcional; si se incluye, se ejecuta siempre


„ Coloque código de limpieza, como el utilizado para
cerrar archivos, en el bloque Finally
Try
Try
fs
fs == New
New FileStream("data.txt",
FileStream("data.txt", FileMode.Open)
FileMode.Open)
Catch
Catch ex
ex As
As FileNotFoundException
FileNotFoundException
MessageBox.Show("Data
MessageBox.Show("Data File
File Missing")
Missing")
Catch
Catch ex
ex As
As Exception
Exception
MessageBox.Show(ex.Message)
MessageBox.Show(ex.Message)
Finally
Finally
If
If Not
Not (fs
(fs Is
Is Nothing)
Nothing) Then
Then fs.Close(
fs.Close( ))
End
End Try
Try

Introducción El bloque Finally es un bloque de código opcional, que si se incluye, siempre


se ejecuta. En este bloque, podemos definir acciones que deben realizarse con
independencia de si se produce una excepción. Se podrían incluir acciones
como cerrar archivos o liberar objetos. El bloque Finally se utiliza
habitualmente para limpiar recursos utilizados en nuestro código cuando un
método falla.
El código de la sección Finally siempre se ejecuta al final, justo antes de que el
bloque de gestión de errores pierda el alcance. Si incluimos este bloque, se
ejecuta después del bloque Try si no se producen errores, o después de que el
bloque Catch adecuado se haya procesado si se ha capturado una excepción.
Manejo de errores y excepciones 45

Ejemplo de uso de El siguiente código proporciona un ejemplo de uso de un bloque Finally para
Try…Catch…Finally cerrar un archivo abierto.
En este ejemplo:
„ El bloque Try siempre se ejecuta.
• Si hay un error FileNotFoundException, el código del primer bloque
Catch se ejecuta a continuación, seguido del código del bloque Finally.
• Si se produce cualquier otro tipo de error, el código del segundo bloque
Catch se ejecuta a continuación, seguido del código del bloque Finally.
„ Si no hay ningún error, el código del bloque Finally se ejecuta después del
código 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

Cómo lanzar excepciones

„ Utilice la instrucción Throw para crear una excepción


que usted pueda controlar con el código de la gestión
estructurada de excepciones

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

Introducción La instrucción Throw crea una excepción que podemos controlar con el código
de la gestión estructurada de excepciones. En algunos casos, deberíamos utilizar
una instrucción Throw para lanzar una excepción, que puede ser atrapada
invocando código. Para entender cuando podríamos necesitar lanzar una
excepción, pensemos en el siguiente escenario.
Escenario utilizando la Cuando escribimos aplicaciones grandes, es una práctica habitual escribir
instrucción Throw código reutilizable: procedimientos Function y Sub que pueden utilizarse
repetidamente en la aplicación o en otras aplicaciones. Normalmente, una
función toma ciertos parámetros, realiza una tarea y puede devolver un valor.
Por ejemplo: una función que tome el día del año como un entero y devuelva la
fecha del calendario. Cuando pase el número 33, se supone que esta función
devolverá “2 de febrero”.
Como desarrolladores de esta función, necesitamos pensar cómo controlar el
caso de pasar a la función un dato no válido. Por ejemplo, si se pasa a la
función un número negativo, o un número mayor que 365 en caso de años no
bisiestos, se producirá un error, y el valor devuelto no será correcto.
La mejor solución a este problema es dependiente de la aplicación. En un caso
sencillo, podríamos pedir al usuario que introdujera la información correcta. Sin
embargo, si esta función es invocada por otra función en lugar de por un
usuario, la solución no es tan sencilla. En este caso, podemos escribir una
instrucción Throw que lance la excepción adecuada en caso de que el
argumento pasado a la función esté fuera de rango.
Ejemplo de uso de la El siguiente código utiliza la instrucción Throw para crear un error
instrucción Throw 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 gestión estructurada de excepciones


excepciones

No utilice la gestión estructurada de excepciones para errores que


probablemente se producirán de modo rutinario. Utilice otros bloques
de código para abordar estos errores.
zz If…End If, etc.

Devuelva un valor para los casos de errores habituales.


z Ejemplo: los métodos de lectura de E/S de archivos
no lanzan excepción de fin de archivo.

Organice los bloques Catch de específicos a generales.

Introducción La gestión estructurada de excepciones puede ser un modo eficaz de controlar


posibles errores de nuestra aplicación. Sin embargo, es importante saber cuándo
utilizar un bloque Try…Catch…Finally y cuándo utilizar otras soluciones de
código para solucionar un problema. Si es probable que un problema ocurra,
podemos buscarlo programáticamente y abordarlo sin utilizar la gestión
estructurada de excepciones. Cuando un error es realmente una excepción
(cuando es posible pero poco probable que ocurra) resulta adecuado el uso de la
gestión estructurada de excepciones.
Ejemplo de control de El siguiente ejemplo utiliza una instrucción If para comprobar si una conexión
un error potencial está cerrada. Podemos utilizar este método como alternativa para lanzar una
utilizando una excepción si la conexión no está cerrada.
instrucción If
If conn.State <> ConnectionState.Closed Then
conn.Close( )
End If

Ejemplo de control del En el siguiente ejemplo se lanza una excepción si la conexión no está cerrada.
mismo error utilizando
Try…Catch Try
conn.Close( )
Catch ex As InvalidOperationException
' Do something with the error or ignore it
End Try

Cuándo utilizar cada El método que decidamos utilizar para controlar errores potenciales depende de
método 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 gestión de excepciones es mejor porque se ejecuta menos
48 Manejo de errores y excepciones

código en el caso normal. Si el evento ocurre de modo rutinario, es mejor


utilizar otro método para buscar errores. En ese caso, si ocurre una excepción,
ésta tardará más en controlarse.
Otras directrices para la La siguiente lista describe otras directrices a seguir cuando implementamos la
gestión estructurada de gestión estructurada de excepciones:
excepciones
„ Si sabemos que se va a producir una situación determinada, como un error
de fin de archivo, no utilizar una excepción para señalizarlo. Utilicemos el
valor devuelto del método. Por ejemplo, en el .NET Framework, los
métodos de lectura de archivos de entrada/salida (E/S) no lanzan una
excepción 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 más a la menos
específica. Esta técnica controla la excepción específica antes de pasar a un
bloque Catch más general.
„ Utilizar los bloques Try…Finally alrededor del código que puede generar
potencialmente una excepción, y colocar sus instrucciones Catch en una
ubicación. Cuando lo haga, la instrucción Try generará la excepción, la
instrucción Finally cerrará o reasignará recursos, y la instrucción Catch
controlará la excepción desde una ubicación central.

Nota Si se desea más información sobre cuándo utilizar la gestión estructurada


de excepciones, consulte Best Practices for Handling Exceptions en la
documentación de Visual Studio .NET.
Manejo de errores y excepciones 49

Demostración: Uso de la gestión estructurada de excepciones


excepciones

„ En esta demostración, aprenderemos


cómo implementar la gestión estructurada
de excepciones en nuestro código

En esta demostración, estudiaremos cómo utilizar la instrucción Try…Catch


para implementar la gestión estructurada de excepciones.

Ë Ejecutar la aplicación
1. Abrir la solución Exceptions.sln, que se encuentra en la carpeta Exceptions.
Esta carpeta se puede encontrar dentro del fichero demos08.zip.
2. Abrir el Editor de código del formulario Exceptions.vb y establecer seis
puntos de interrupción: uno en la instrucción Try, y uno en cada instrucción
Catch en la rutina RunExceptions.
3. Ejecutar el proyecto Exceptions.
4. Hacer clic en el botón Overflow del formulario. El proceso de Visual Basic
se detendrá en el primer punto de interrupción.
5. Utilizar F8 para recorrer el código paso a paso en el bloque Try, y explique
los detalles del overflow. Explique que la clase OverflowException filtra la
excepción.
6. Recorrer el resto de código de la excepción del overflow. Cuando se muestre
el cuadro de mensaje, hacer clic en OK y pulsar F5 para proseguir con la
ejecución.
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 botón adecuado del formulario.
b. Utilizar F8 para recorrer por el código y mostrar cómo se controlan las
excepciones en cada caso.
c. Hacer clic en OK y pulsar F5 para proseguir con la ejecución.
8. Cuando hayamos mostrado el control de excepciones para cada botón
finalizar la sesión de depuración cerrando el formulario.
9. Cerrar el entorno de desarrollo Visual Studio .NET.

Das könnte Ihnen auch gefallen