Objectives
After completing this lesson, you will be able to:
- Acceda al modo de depuración.
- Controlar la ejecución del código.
- Analizar el contenido de los objetos de datos.
El modo debugging
Vea este vídeo para comprender la necesidad de depuración.
Iniciar el Debugger
Para debug un programa ABAP, fije un breakpoint y a continuación ejecute el programa normalmente. Cuando el programa alcanza el breakpoint, el sistema lo interrumpe y abre la perspectiva de depuración ABAP en ADT. A continuación, puede ejecutar cada sentencia posterior individualmente para ver qué efecto que tiene en el programa. También puede inspeccionar el contenido de todas las variables en el programa para ver si cualquiera de los valores no se ha previsto.
Para fijar o eliminar un breakpoint, haga clic con el botón derecho en el margen izquierdo del editor y seleccione Conmutar breakpoint. Como alternativa, puede hacer doble clic en el margen izquierdo. Tenga en cuenta que el programa debe activarse antes de poder fijar breakpoints.
Los breakpoints son específicos del usuario y persistentes: permanecen activos incluso después de haber cerrado sesión en ADT y volver a activarlos. Para evitar que el depurador empiece en un breakpoint, debe borrar el breakpoint (mediante la función Conmutar breakpoint) o desactivarlo con la función correspondiente en el menú contextual.
Nota
Dependiendo de sus opciones de personalización, ADT solicitará confirmación, primero, antes de abrir automáticamente la perspectiva de depuración.
La perspectiva debug en ADT
Cuando depura un programa ABAP mediante las herramientas de desarrollo ABAP, se utiliza la perspectiva debug. 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.
Veamos algunos elementos importantes de la perspectiva del depurador.
Cómo iniciar el depurador
Control de ejecución de código
Algunas funciones de navegación
Una vez iniciada la depuración, utilice las funciones de navegación para controlar la ejecución del código.
Algunas funciones de navegación importantes son las siguientes:
- Paso hasta (F5)
Seleccione Paso en o pulse F5 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 pulse F8 para ejecutar el programa hasta el siguiente breakpoint. Si el debugger no alcanza más breakpoints, el programa se ejecuta hasta el final y se cancela la sesión de debugging.
- Ejecutar hasta línea (Mayús+F8)
Seleccione Ejecutar a línea o pulse Mayús+F8 para ejecutar el programa hasta la posición actual del cursor. Hacer clic en una línea de código y seleccionar esta función es una alternativa conveniente para fijar un breakpoint, seleccionar Reanudar y volver a eliminar el breakpoint.
- Saltar a línea (Mayús+F12)
Seleccione Saltar a línea o pulse Mayús+F12 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 un cierto fragmento de código o para repetir la depuración de un bit de código que se perdió el análisis la primera vez. Tenga en cuenta que esto es realmente saltar, no ejecutar la codificación. Cuando salta hacia atrás, las modificaciones en los objetos de datos no se revierten.
- Finalizar
Seleccione Finalizar si ha terminado con la depuración y no desea ejecutar el programa restante. La sesión de depuración finaliza inmediatamente.
Breakpoints especiales
Ha aprendido que puede crear y gestionar breakpoints haciendo clic en el margen izquierdo de la vista del editor ABAP. Esto también funciona con la vista del editor ABAP en la perspectiva Depurar.
Además, puede cambiar a la vista Breakpoints y gestionar sus breakpoints allí.
En la vista Breakpoints también puede crear breakpoints especiales:
- Breakpoint de sentencia
Un breakpoint de sentencia no se adjunta a una línea de código específica, sino a una sentencia ABAP específica. Un breakpoint de sentencia en la sentencia CLEAR, por ejemplo, hace que el programa se detenga en el depurador cada vez que se ejecuta una sentencia CLEAR, independientemente de dónde se encuentre esta sentencia.
Para crear un breakpoint de sentencia, abra la lista desplegable desde la barra de herramientas de la vista Breakpoints y seleccione Añadir breakpoint de sentencia …
- Breakpoint de excepción
Se adjunta un breakpoint de excepción a una excepción específica. Hace que el programa se detenga en el depurador cada vez que se emite esta excepción en particular, independientemente de si el programa trata esta excepción o si provoca un error en tiempo de ejecución. Para crear un breakpoint de excepción, abra la lista desplegable desde la barra de herramientas de la vista Breakpoints y seleccione Añadir breakpoint de excepción ….
- Breakpoint condicional
Un breakpoint se convierte en un breakpoint condicional añadiendo una condición. Si la ejecución del programa alcanza un breakpoint condicional, el programa solo se detiene en el depurador si se cumple la condición. Si, por ejemplo, se encuentra un breakpoint entre DO y ENDDO, provocará que el programa se detenga en el depurador en cada iteración. Pero si añade una condición sy-index > 20, el depurador ignorará este breakpoint durante las primeras 20 iteraciones y solo se detendrá en las siguientes iteraciones.
Para añadir una condición a un breakpoint, selecciónela en la lista de breakpoints e introduzca la condición en el campo Condición. Pulse Intro para grabar el breakpoint con la condición.
Watchpoints
Si un valor inesperado de una variable le está causando problemas, puede realizar un seguimiento de su valor durante el curso del programa mediante un watchpoint.
Vea este vídeo para descubrir cómo.
Cómo controlar la ejecución del código
Análisis de objetos de datos
Visualizar contenido de objetos de datos
Vea este vídeo para aprender a visualizar el contenido de los objetos de datos en el depurador.
Visualizar contenido de tablas internas
Vea este vídeo para aprender a visualizar el contenido de las tablas internas.
Modificar los valores de variables
En función de sus autorizaciones, puede modificar el valor de las variables durante la depuración.
Para variables simples, localice la variable en la vista Variables, haga clic con el botón derecho en ella y seleccione Modificar valor….
Para modificar el contenido de una tabla interna, debemos distinguir entre modificar el valor de una fila existente y añadir o eliminar filas.
Como se muestra en la figura, las siguientes funciones están disponibles cuando hace clic con el botón derecho en la vista Tabla interna ABAP:
- Modificar valor...
- Seleccione Modificar valor… para modificar el contenido de una fila existente.
- Insertar fila...
- Seleccione Insertar fila… para añadir una fila nueva. Puede decidir si desea añadir la nueva fila o insertarla en la posición seleccionada.
- Eliminar filas seleccionadas
- Seleccione Eliminar filas seleccionadas para eliminar las filas seleccionadas antes de hacer clic con el botón derecho. Para seleccionar una fila, haga clic con el botón izquierdo en ella. Para seleccionar más de una fila, mantenga pulsada la tecla Ctrl o la tecla Mayús al hacer clic con el botón izquierdo en filas adicionales.
- Eliminar filas...
- Seleccione Eliminar filas… para eliminar un rango más grande de filas, o incluso todas las filas. Se le solicita el número de la fila de inicio y la fila de fin que desea eliminar.
Cómo analizar el contenido de los objetos de datos
Debug código ABAP
En este ejercicio, analizará el código ABAP mediante el depurador ABAP.
Tarea 1: Preparación
Copie la clase que desea depurar.
Pasos
Abra el código fuente de la clase global /LRN/CL_S4D400_BTT_DEBUG en el editor ABAP.
En la barra de herramientas de Eclipse, seleccione Abrir objeto de desarrollo ABAP. Como alternativa, pulse Ctrl + Mayús + A.
Introduzca /LRN/CL_S4D400_BTT como string de búsqueda.
En la lista de objetos de desarrollo, seleccione /LRN/CL_S4D400_BTT_DEBUG y, a continuación, seleccione OK.
Vincule la vista Explorador de proyectos con el editor.
En la barra de herramientas Explorador de proyectos, busque el botón Vincular con editor. Si aún no se ha pulsado, selecciónelo. Como resultado, el objeto de desarrollo, que está abierto en el editor, debería resaltarse en el Explorador de proyectos.
Copie la clase /LRN/CL_S4D400_BTT_DEBUG en una clase de su propio paquete (nombre sugerido: ZCL_##_DEBUG, donde ## representa su número de grupo).
En la vista Explorador de proyectos, haga clic con el botón derecho en la clase /LRN/CL_S4D400_BTT_DEBUG para abrir el menú de contenido.
En el menú contextual, seleccione Duplicar ....
Introduzca el nombre de su paquete (ZS4D400_##, donde ## representa su número de grupo) y el nombre de la nueva clase (ZCL_##_DEBUG) y, a continuación, seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Active y pruebe la clase.
Pulse Ctrl + F3 para activar la clase.
Pulse F9 para ejecutar la clase.
Verifique la salida en la vista Consola.
Verifique la vista Consola que debería haberse abierto como una nueva pestaña debajo de la vista de editor.
Si la vista Consola no está visible, ábrala seleccionando Ventana→Mostrar vista→Otros. Haga doble clic en Consola en la lista de aciertos.
Tarea 2: Analizar los valores iniciales
Introduzca el depurador en la primera sentencia ejecutable en el método if_oo_adt_classrun~main( ) y analice los valores de algunos objetos de datos variables y constantes.
Pasos
Fije un breakpoint en la primera sentencia que no defina un tipo o declare un objeto de datos.
Consejo
TYPES define un tipo de datos, CONSTANTS declara un objeto de datos constante, DATA declara un objeto de datos variable.
Haga doble clic en el margen izquierdo del editor junto a la línea loan_remaining = loan_total.para fijar un breakpoint.
Ejecute la clase como una aplicación de consola e introduzca el depurador.
Pulse F9 para ejecutar la clase.
Si se le pregunta si desea cambiar a la perspectiva Depurar, marque Recordar mi decisión y seleccione OK.
Visualice el valor del objeto de datos loan_rest y loan_total en la vista Variables.
En la línea de código actual (la que tiene un fondo verde), haga doble clic en loan_remaining.
En la misma línea de código, haga doble clic en loan_total.
Tarea 3: Ejecución del programa de control
Establezca puntos de ruptura y puntos de vigilancia. Ejecute pasos individuales o reanude la ejecución hasta que se alcance el siguiente breakpoint o punto de observación. Supervisar las modificaciones de valor de los objetos de datos.
Pasos
Ejecute un solo paso para depurar la valoración en la línea actual.
En la barra de herramientas, seleccione Paso a (F5) o pulse F5.
Verifique que el valor del préstamo restante haya cambiado de 0..00 a 5000,00.
Visualice el contenido del objeto de datos spec_repay_mode. A continuación, ejecute otro paso individual para ver qué rama WHEN de la estructura de control CASE se ejecuta.
En la siguiente línea de código, haga doble clic en spec_repay_mode.
Pulse F5 para ver que el programa salta a la línea de código WHEN 'Q'..
Establezca un punto de vigilancia para el préstamo variable_restante y reanude la ejecución del programa. ¿Dónde se detiene la ejecución del programa de nuevo?
En la vista Variables, haga clic con el botón derecho en LOAN_REMAINING y seleccione Fijar watchpoint.
En la barra de herramientas, seleccione Reanudar (F8) o pulse F8.
La ejecución del programa se detiene inmediatamente después de la línea de código loan_remaining = loan_remaining - repayment_month., también para ser precisos, en la siguiente línea de código con código ejecutable.
Visualice el contenido del objeto de datos repayment_plan. A continuación, ejecute otro paso individual para ver cómo se rellena con la sentencia APPEND.
Nota
Dado que repayment_plan es una tabla interna, no solo se muestra en la vista Variables, sino también en la vista Tabla interna ABAP (Debugger) debajo del editor.
Haga doble clic en repayment_plan al final del extracto APPEND.
Pulse F5 para ver cómo repayment_plan se rellena con una primera fila.
Inspeccione el modelo de string en la sentencia APPEND y vincúlelo con la primera fila resultante en la tabla interna repayment_plan. Visualice el contenido de los objetos de datos que aparecen en las expresiones incrustadas.
Haga doble clic en los objetos de datos que aparecen entre corchetes para mostrar su contenido.
Establezca otro punto de vigilancia para repayment_plan variable y reanude la ejecución del programa varias veces. Siempre que la ejecución alcance uno de los puntos de vigilancia, analice el valor del préstamo restante y se añadirán filas nuevas al plan de amortización.
En la vista Variables, haga clic con el botón derecho en REPAYMENT_PLAN y seleccione Fijar Watchpoint.
Pulse F8 para reanudar la ejecución del programa.
Analice los objetos de datos en la vista Variables y la vista Tabla interna ABAP (depurador).
Después de un tiempo, fije un breakpoint de sentencia para todas las sentencias EXIT y borre los dos puntos de control.
Navegue a la vista Breakpoints.
Consejo
Encontrará la vista Breakpoints junto a la vista Variables.
En la barra de herramientas de la vista Breakpoints, despliegue el botón desplegable a la izquierda y seleccione Añadir breakpoint de sentencia ....
En la ventana de diálogo que aparece, introduzca EXIT como string de búsqueda, haga clic en el valor EXIT en la lista de aciertos y seleccione OK.
En la vista Breakpoints, haga clic con el botón derecho en el punto de observación LOAN_REMAINING y seleccione Eliminar.
En la vista Breakpoints, haga clic con el botón derecho en el punto de observación REPAYMENT_PLAN y seleccione Eliminar.
Reanude la ejecución del programa hasta que llegue a la primera sentencia EXIT. Desactive el breakpoint de sentencia para la sentencia EXIT. A continuación, ejecute pasos individuales hasta que llegue a la parte de salida del programa.
Pulse F8 para reanudar la ejecución del programa.
Cambie a la vista Breakpoints y desmarque la línea EXIT [sentencia].
Pulse F5 hasta que llegue a la primera línea de código que comienza con out->write(.
Abra la vista Consola. Ejecute el programa restante y persiga la salida en la vista de consola.
No pulse
F5 para depurar la salida. En su lugar, utilice
F6.
Nota
Como aprenderá más adelante en el curso out->write( ... ) no es una sentencia ABAP, sino un bloque de código reutilizable que consta de muchas sentencias ABAP. Al pulsar F5 se accede a este código para analizarlo en detalle. Con F6 realiza un paso sobre el bloque de código, tratándolo como una sola sentencia.
Presione F6 varias veces hasta que llegue al final de la aplicación.
Analice la salida adicional en la vista Consola y compárela con el modelo de string en la línea de código anterior.
Cuando se cancela la aplicación, no olvide volver a la perspectiva ABAP.
Seleccione ABAP a la derecha de la barra de herramientas de Eclipse.