"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Depuración &#printf&# Mejorada

Depuración &#printf&# Mejorada

Publicado el 2024-11-03
Navegar:566

Una de las técnicas de depuración más comunes, la depuración con 'printf' es particularmente popular porque la mayoría de las personas la aprende de forma intuitiva cuando escriben sus primeros programas.

La depuración 'printf' es muy accesible porque no necesitas ninguna herramienta especial para ella. Cuando te enfrentas a tus primeros bugs, incluso antes de que sepas qué es un depurador, lo natural es hacer que tu programa imprima variables paso a paso, para que puedas seguir la ejecución en la consola.

Aunque es una de las técnicas de depuración más básicas, los desarrolladores experimentados también la usan mucho. Puede ayudarte a investigar cualquier tipo de problema, como rutinas subóptimas, estado inconsistente, problemas de multithreading, y más.

Como ya mencioné, esta técnica no requiere que uses ninguna herramienta especial, como un IDE. Sin embargo, si estás usando uno, puede hacer que seas aún más eficiente en el registro del estado del programa.

Nota: Este artículo muestra características de IntelliJ IDEA. Es posible que características similares estén o no disponibles en otros IDEs. Si estás utilizando una herramienta diferente, considera consultar su documentación para ver si estas características también están presentes.

Live templates

IntelliJ IDEA proporciona live templates para los patrones de registro de depuración más comunes. Para usar una plantilla en vivo para el registro de depuración, introduce la abreviatura correspondiente y presiona Tab. IntelliJ IDEA generará la sentencia de impresión y la insertará en el cursor.

Veamos un par de ejemplos.

Registrar parámetros de método

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // escriba 'soutp' aquí, luego presione Tab

    return null;
}

Código generado:

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("in = "   in   ", mask = "   mask   ", newColor = "   newColor);

    return null;
}

Registrar valores

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    // escriba 'soutv' aquí, presione Tab y luego seleccione el valor

    return a * b * parameter;
}

Código generado:

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    System.out.println("b = "   b);

    return a * b * parameter;
}

Registrar entradas de método

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // escriba 'soutm' aquí

    return null;
}

Código generado:

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("ImageUtils.recolor");

    return null;
}

Puntos de interrupción de registro

Una de las desventajas de depurar con sentencias de impresión es que introducen la sobrecarga de la gestión manual. No puedes encenderlos y apagarlos rápidamente, y definitivamente no quieres cometer el error de enviarlos y ejecutarlos en producción.

Por esta razón, si necesitas registrar algo para fines de depuración, recomendaría usar puntos de interrupción de registro, ya que son mucho más fáciles de manejar.

Depuración

Para establecer un punto de interrupción de registro, mantén presionada Shift, luego haz clic en el margen. A diferencia de un punto de interrupción regular, no suspende la ejecución del programa, sino que imprime en la consola.

Por defecto, es un mensaje que indica que el programa ha llegado a esta línea. También puedes usar las opciones cerca de la casilla de verificación Evaluate and log en la configuración del punto de interrupción si prefieres registrar la traza de pila actual o el resultado de una expresión personalizada.

Depuración

Nota: Ten cuidado con las expresiones de registro. Evaluar las que causan efectos secundarios puede ser una fuente de nuevos bugs o comportamientos inesperados. Además, cuando se utilizan en código caliente, podrían ralentizar significativamente tu programa.

Cuando los puntos de interrupción de registro se vuelven numerosos, puedes hacer un seguimiento y administrarlos en el cuadro de diálogo de Breakpoints (Run | View Breakpoints):

Depuración

Incluso puedes crear grupos personalizados para ellos:

Depuración

Esto te ayudará a administrar tus puntos de interrupción de manera centralizada. Por ejemplo, puedes crear un grupo relacionado con un bug en particular y guardarlo para más tarde. Cuando el problema desaparece, simplemente lo apagas. De esta manera, si el problema vuelve a aparecer, no tienes que recrear todo desde cero. Simplemente vuelves a encender el grupo.

Registro de eventos frecuentes

Para los eventos que ocurren mucho durante la ejecución del programa, es posible que registrar cada evento individualmente sea superfluo. Esto no solo inunda la consola con mensajes, sino que una gran cantidad de interacción con I/O puede ralentizar significativamente la sesión de depuración.

Depuración

Para estos eventos, puede ser útil utilizar la función Pass count. Puedes acceder a ella en el cuadro de diálogo Breakpoints.

Depuración

Después de haber establecido Pass count en un valor específico, el correspondiente punto de interrupción sólo se activará cada vez que se alcance n-veces, asegurando que el registro no se convierta en una molestia.

Resumen

Independientemente de si estás insertando declaraciones de impresión o configurando puntos de interrupción de registro para depuración, las herramientas modernas tienen características para mejorar tu experiencia de depuración. Con esta publicación, quería asegurarme de que estás al tanto de estos pequeños trucos que hacen que todo el proceso sea más agradable.

Si estás interesado en más artículos relacionados con la depuración y el perfilado, revisa algunos de mis otros artículos:

  • Debugger.godMode() – Hackear una Aplicación JVM con el Depurador
  • Solucionar Problemas del Depurador Lento
  • ¿Qué Está Mal con createDirectories()? - Guía para el Perfilado de la CPU
  • Depurar sin Puntos de Interrupción
Declaración de liberación Este artículo se reproduce en: https://dev.to/flounder4130/depuracion-printf-mejorada-26l1?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3