Using ABAP Debugger

Objective

After completing this lesson, you will be able to depurar un programa ABAP

Empezar a utilizar el ABAP Debugger en ADT

No hay ningún modo de solucionar el hecho de que se produzcan errores en programas. Sin embargo, estos se manifiestan de distintas maneras. Cuando un usuario inicia una aplicación errónea, puede fallar, puede suceder algo inesperado o puede que no suceda nada. Desde el punto de vista del usuario, en el nivel de interfaz de usuario, es imposible decir cómo y por qué se ha producido este error.

Como desarrollador, debe examinar el programa más detenidamente, línea por línea, para establecer exactamente qué sentencias y combinaciones de valores en las diferentes variables de programa han causado el error. Aquí es donde entra el Debugger.

El Debugger en ADT es una herramienta de diagnóstico importante que puede utilizar para analizar una aplicación ABAP.

Con el Debugger, puede determinar por qué un programa no funciona correctamente pasando por el programa en tiempo de ejecución. Esto le permite ver las sentencias que se ejecutan y el valor de modificación de los valores de variable a medida que avanza el programa.

Para utilizar el depurador, primero debe decidir dónde iniciar el proceso de depuración. Una forma es establecer breakpoints en el código fuente, ejecutar su programa y detenerse en ese breakpoint establecido.

Algunas de las funciones del Debugger que están disponibles son las siguientes:

Características del ABAP Development Tools (ADT) Debugger

CaracterísticasDepurador ADT
Configuración de breakpoints
WatchpointsSí (en función de la liberación)
Breakpoints condicionales
Código de paso a paso
Visualización de valores de variable

Depurar un programa ABAP mediante las herramientas de desarrollo ABAP (ADT)

Al depurar un programa ABAP con ADT, se utiliza la perspectiva Depurar. Esta es una versión personalizada de la perspectiva Eclipse Debug estándar, y contiene vistas y funciones que son de especial importancia para la depuración.

Captura de pantalla de la perspectiva Depurar con vistas específicas de depuración

Algunos elementos importantes de la perspectiva del depurador son los siguientes:

Vista de código fuente

La vista Código fuente es la parte central de la perspectiva del depurador. Muestra el código fuente y resalta la posición actual en el programa.

Vista de variables

La vista Variables también es muy importante. Esta vista se utiliza para visualizar los valores actuales de variables de variables.

Vista Breakpoints

La vista Breakpoints se muestra junto a la vista Variables (no seleccionada en la figura anterior, Depurar perspectiva). Esta vista se utiliza para visualizar, borrar o crear breakpoints. Los breakpoints son puntos en el programa en los que se interrumpe el procesamiento normal y el sistema le muestra el Debugger para que pueda analizar el estado del programa exactamente en ese momento.

Funciones de navegación

Al depurar un programa, utilice las funciones de navegación para controlar la ejecución del código.

Vista de depuración

La vista Depurar en la parte superior izquierda muestra la sesión de depuración y la jerarquía de llamadas. Necesitará esto más tarde cuando depure llamadas de unidades de modularización, por ejemplo, métodos.

Selector de perspectivas

Puede volver a la perspectiva ABAP con los botones Selector de perspectivas en la esquina superior derecha.

Control de la ejecución del código

Algunas funciones de navegación

Cuando inicie la depuración, utilice las funciones de navegación para controlar la ejecución del código.

Captura de pantalla del botón “Step Into”
Captura de pantalla del botón Reanudar

A continuación, se detallan algunas funciones de navegación importantes:

Paso hacia (F5)

Seleccione Paso en o F5 en el teclado para ejecutar un solo paso. Utilice esta función para un análisis paso a paso. Si, por ejemplo, desea ver qué bloque de código de una estructura de control se ejecuta realmente.

Reanudar (F8)

Seleccione Reanudar o F8 en el teclado para ejecutar el programa hasta el siguiente breakpoint.  Si el depurador no alcanza más breakpoints, el programa se ejecuta al final y la sesión de depuración se cancela.

Ejecutar a línea (Mayús+F8)

Seleccione Ejecutar hasta la línea o seleccione Mayús+F8 en el teclado para ejecutar el programa hasta la posición actual del cursor. Seleccionar una línea de código y seleccionar esta función es una alternativa conveniente para fijar un breakpoint, seleccionar Reanudar y eliminar el breakpoint de nuevo.

Saltar a línea (Mayús+F12)

Seleccione Saltar a línea o seleccione Mayús+F12 en el teclado para omitir algunas líneas de código o para saltar hacia atrás a algún código ya ejecutado. Esta función puede ser útil para simular lo que sucedería si se eliminara una determinada parte del código o para repetir la depuración de un poco de código que se perdió al analizar la primera vez. Tenga en cuenta que esto es saltar, no ejecutar el código. Cuando salta hacia atrás, las modificaciones en los objetos de datos no se revierten.

Finalizar

Seleccione Finalizar (icono de cuadro rojo) si ha terminado con la depuración y no desea ejecutar el programa restante. La sesión de depuración finaliza inmediatamente.

Visualizar contenido de objetos de datos

Una forma de analizar el contenido de los objetos de datos en el depurador es la funcionalidad de pasar el ratón por encima del editor ABAP. Mientras esté en el modo debugging, sitúe el cursor sobre el nombre de un objeto de datos y espere un momento. Se abre un cuadro de diálogo con el contenido del objeto de datos.

Otra forma de analizar el contenido de los objetos de datos en el depurador es la vista Variables. Esta vista muestra una lista de objetos de datos y sus valores actuales. La lista principal, las denominadas variables de nivel superior, contiene algunos objetos de datos integrados, de forma predeterminada. En este ejemplo SY-SUBRC y ME. Expanda el nodo Locales para ver una lista de todos los objetos de datos variables definidos en el bloque de procesamiento actual.

Existen tres formas de añadir objetos de datos a la lista principal en la vista Variables:

  • En el editor, haga doble clic en el nombre de un objeto de datos
  • En la lista de variables, haga clic con el botón izquierdo en la reserva-espacio <Enter variable> e introduzca el nombre del objeto de datos
  • Haga clic con el botón derecho en una variable en el nodo Locales y seleccione Mostrar como variable de nivel superior

Una forma de analizar el contenido de los objetos de datos en el depurador es la funcionalidad de pasar el ratón por encima del editor ABAP. Mientras esté en el modo debugging, sitúe el cursor sobre el nombre de un objeto de datos y espere un momento. Se abre un cuadro de diálogo con el contenido del objeto de datos.

Otra forma de analizar el contenido de los objetos de datos en el depurador es la vista Variables. Esta vista muestra una lista de objetos de datos y sus valores actuales. La lista principal, las denominadas variables de nivel superior, contiene algunos objetos de datos integrados, de forma predeterminada. En el ejemplo, son SY-SUBRC y ME. Expanda el nodo Locales para ver una lista de todos los objetos de datos variables definidos en el bloque de procesamiento actual.

Existen tres formas de añadir objetos de datos a la lista principal en la vista Variables:

  • En el editor, haga doble clic en el nombre de un objeto de datos
  • En la lista de variables, haga clic con el botón izquierdo en el marcador de posición <Introducir variable> e introduzca el nombre del objeto de datos
  • Haga clic con el botón derecho en una variable en el nodo Locales y seleccione Mostrar como variable de nivel superior

Aquí tienes un consejo. Para eliminar un objeto de datos de la lista, haga clic con el botón derecho en él y seleccione Eliminar.

Watchpoints

Un watchpoint simple en una variable hace que el programa se detenga en el depurador siempre que cambie el valor de esta variable. Al añadir una condición, el programa solo se detiene cuando el valor de la variable cambia y se cumple la condición.

Para fijar un watchpoint en una variable, haga doble clic en la variable en la visualización del código fuente y, a continuación, haga clic con el botón derecho en ella y seleccione Fijar watchpoint. Esto crea un watchpoint en esta variable, que puede ver en la vista Breakpoints.

Para añadir una condición a un watchpoint, selecciónela en la lista de breakpoints e introduzca la condición en el campo Condición. Pulse Intro para grabar el watchpoint con la condición.

Captura de pantalla de un watchpoint definido en la vista Breakpoints

Si un valor inesperado de una variable le está causando problemas, puede realizar un seguimiento de su valor durante el transcurso de la ejecución del programa utilizando un Watchpoint.

Un Watchpoint simple en una variable hace que el programa se detenga en el depurador siempre que cambie el valor de esta variable. Al añadir una condición, el programa no se detiene en cada modificación de valor de la variable, sino solo en aquellos casos en los que también se cumple la condición.

Para establecer un Watchpoint en una variable, solo mientras está en el depurador, resalte la variable en el código fuente, luego haga clic con el botón derecho en ella y seleccione Establecer Watchpoint. Esto crea un Watchpoint en la variable, que puede ver en la vista Breakpoints.

Seleccione la variable Watchpoint para agregar una condición a un Watchpoint, selecciónela en la lista de Breakpoints e introduzca la condición en el campo Condición. Seleccione Intro en el teclado para guardar el Watchpoint con la condición.

Para eliminar el Watchpoint, vaya a la vista Breakpoints, haga clic con el botón derecho en la variable Watchpoint y seleccione Eliminar.

Depurar una aplicación ABAP y fijar un watchpoint

Ejercicio empresarial

Ahora veremos cómo establecer un breakpoint y crear un watchpoint.

Nota

En este ejercicio, XX hace referencia a su número.

Pasos

  1. Abra la clase local LHC_GROCERY de la clase ZBP_R_XX_GROCERY. Añada un breakpoint cuando al campo lv_due se le asigne un valor.

    1. Haga doble clic en la clase ZBP_R_XX_GROCERY en el Explorador de proyectos.

    2. Seleccione la ficha Tipos locales en la parte inferior de la ventana del editor.

    3. Para fijar el breakpoint, haga doble clic en el margen de la línea:

      lv_expiration = ls_grocery-Expirationdate.
  2. Ejecute el programa de aplicación.

    1. Haga doble clic en la vinculación de servicio ZUI_XX_GROCERY_04 en el explorador de proyectos para abrir la vinculación de servicio.

    2. En Detalles de versión de servicio, seleccione Comestibles debajo de Conjunto de entidades y asociación.

    3. Pulse Vista previa... para ejecutar la aplicación.

  3. Avance por el código y vea las variables.

    1. Pulse Ir para ver la lista de comestibles. Si la lista está vacía, pulse Crear y cree al menos un artículo de tienda de comestibles.

    2. Marque la casilla de selección a la izquierda de un artículo de comestibles y pulse Verificar vencimiento.

    3. Habrá una petición en Eclipse para cambiar a la perspectiva de depuración. Pulse Cambiar. Ahora se visualiza la perspectiva de depuración.

    4. Para visualizar el valor de lv_Expiration, pase el ratón por encima de lv_due en la línea:

      lv_expiration = ls_grocery-Expirationdate.
    5. Haga doble clic en lv_expriation para añadir a la lista de variables en la parte derecha de la ventana.

    6. Pulse Paso en (F5) (paso individual). Observe el valor modificado para lv_due en la lista de variables.

    7. Dé un paso a través de más código y observe cualquier valor de variable que le interese.

    8. Para finalizar, pulse Reanudar (F8).

      Captura de pantalla del botón Reanudar
  4. Cree un watchpoint para una variable.

    Nota

    Para que se alcance el watchpoint, la posición de supermercado seleccionada debe tener una fecha de vencimiento en el pasado. Si este no es el caso, haga clic en una posición de comestibles de la lista y, en la pantalla de detalles, seleccione Editar y fije la Fecha de vencimiento en una fecha pasada.
    1. Para crear un watchpoint en una variable, repita los pasos anteriores hasta que introduzca la perspectiva de depuración.

    2. Con el ratón, haga clic con el botón derecho en lv_expirado. Seleccione Fijar watchpoint.

    3. En la parte superior derecha de la pantalla, cambie de la pestaña Variables a la pestaña Breakpoint.

    4. Haga doble clic en lv_expirado y añada esta condición en la parte inferior de la vista.

      = abap.true
    5. Pulse Save Save (Ctrl-S).

    6. Pulse Reanudar (F8).

  5. Visualice los valores antiguos y nuevos de la variable watchpoint.

    1. Pulse la pestaña Variables.

    2. Despliegue Watchpoint LV_EXIPIRED Valores. Visualizar valor reciente y valor actual.

  6. Reanude la aplicación y vuelva a la perspectiva ABAP.

    1. Pulse Reanudar (F8).

    2. Pulse el botón Perspectiva ABAP en la parte superior derecha de la ventana.

    Practicar