Domine estos 30 consejos de depuración de IDEA para desarrollar y corregir errores 10 veces más rápido

Hola a todos, ¡soy Yihang!

Escribir y corregir errores ocupa casi la mayor parte del trabajo diario de un programador. Si puede dominar las habilidades únicas de depurar código, creo que la eficiencia de su trabajo mejorará enormemente;

IDEA nos proporciona funciones de depuración simples y muy poderosas, pero muchos amigos realmente no las han usado. Hoy, juguemos con esos trucos de depuración; más de 30 consejos de depuración, los aprenderá después de aprenderlos. La eficiencia del desarrollo y la depuración aumentó en 10 ¡veces! Intente ir a trabajar a las 9 a. m. y salir del trabajo a las 10 a. m. (susurro: son las 10 p. m. [cabeza de perro manual])

La siguiente es la tabla de contenidos de este artículo:

La consola de depuración de IDEA se encuentra en la parte inferior izquierda de toda la ventana;

Descripción de la función de depuración de IDEA

  • Mostrar punto de ejecución

    Tecla de acceso directo: Alt + F10

    Regrese al punto de interrupción actualmente activado ; cuando su mouse no esté en la línea donde se encuentra el punto de interrupción, después de hacer clic, se restablecerá inmediatamente al punto de interrupción;

  • paso adelante

    Tecla de acceso directo: F8

    Depuración en un solo paso; ejecutar línea por línea. Si hay otros métodos en la línea de ejecución, no se ingresará el método correspondiente; la función más utilizada para la depuración diaria

  • Entrar en

    Tecla de acceso directo: F7

    Ingrese el cuerpo del método. Esta función ingresará métodos personalizados o métodos de biblioteca de terceros; tenga en cuenta que no ingresará métodos JDK ;

  • Forzar el paso hacia adentro

    Tecla de acceso directo: Alt + Mayús + F7

    La entrada forzada al cuerpo del método es Step Intodiferente de la entrada al método JDK;

  • Salir

    Tecla de acceso directo: Mayús + F8

    Saltar fuera del cuerpo del método; generalmente (Force)Step Intose usan juntos

  • Marco de caída

    Regrese al punto de llamada del método y los valores de todas las variables en el contexto también regresarán a ese momento.

    El requisito previo para que se pueda hacer clic en el botón es que el método actual tenga un método superior . Si está en el método principal, el botón será gris y no se podrá hacer clic;

  • Ejecutar hasta el cursor

    Tecla de acceso directo: Alt + F9

    Ejecute el código hasta el cursor y ejecútelo donde se detenga el cursor;

  • Evaluar expresión

    Tecla de acceso directo: Alt + F8

    Calculadora de expresiones; puede ejecutar cualquier expresión legal.

  • Seguimiento de la cadena de flujo actual

    Seguimiento de la transmisión actual; este botón solo se iluminará con el código de transmisión.

  • Volver a ejecutar principal

    Tecla de acceso directo: Ctrl + F5

    Ejecución de consultas Depurar;

  • Reanudar programa

    Tecla de acceso directo: F9

    Reanudar el programa; cuando el código se detiene debido a un punto de interrupción, esta función puede continuar para reanudar la ejecución; cuando hay un siguiente punto de interrupción, saltará al siguiente punto de interrupción; si no hay un siguiente punto de interrupción, la ejecución continuará hasta el final;

  • Detener principal

    Tecla de acceso directo: Ctrl + F12

    Detenga el programa;

  • Ver puntos de interrupción

    Tecla de acceso directo: Ctrl + Mayús + F8

    Abra la ventana de gestión de puntos de interrupción;

  • Silenciar puntos de interrupción

    Deshabilite todos los puntos de interrupción;

  • Obtener volcado de hilo

    Después de obtener el volcado del hilo actual, puede verificar el estado del hilo actual;

  • filtrar

Consejos de depuración

punto de interrupción de línea

El icono de un punto de interrupción de línea es un punto rojo redondo. Haga clic en el comienzo de la línea de código que requiere un punto de interrupción para agregar un punto de interrupción.

punto de interrupción del método

Establezca un punto de interrupción en un método específico. Cuando se ejecuta el método, se ingresará el punto de interrupción;

A continuación se muestra una forma de depurar los escenarios de depuración más utilizados:

Al leer el código fuente o escribir los requisitos comerciales usted mismo, a menudo se utilizan patrones de diseño como estrategias y métodos de plantilla; al depurar, necesita saber qué implementación específica se utiliza para ejecutar el método de interfaz actual o el método abstracto. Se puede encontrar fácilmente depuración de métodos , como ejemplo;

La interfaz Servicetiene dos implementaciones específicas: ServiceAy ServiceB, que implementan los methodmétodos de la interfaz respectivamente. Durante el proceso de depuración, puede establecer un punto de interrupción en el método del método de la interfaz; cuando instanciamos ServiceB en el método principal, el punto de interrupción ingresará automáticamente a Ir a el método método() de ServiceB;

  • Servicio de interfaz

    public interface Service {
          
          
        void method();
    }
    
    • ServicioA

      public class ServiceA implements Service{
              
              
          @Override
          public void method() {
              
              
              System.out.println("Service A");
          }
      }
      
    • ServicioB

      public class ServiceB implements Service{
              
              
          @Override
          public void method() {
              
              
              System.out.println("Service B");
          }
      }
      
  • Principal

    public class Main {
          
          
        public static void main(String[] args) {
          
          
            Service serviceB = new ServiceB();
            serviceB.method();
        }
    }
    

Más puntos de función

  • Condición

    Se utiliza para ingresar expresiones y filtrar.

  • Mirar

    • Emulado

      Se utiliza para mejorar el rendimiento de depuración.

    • Entrada de método

      Activar punto de interrupción al ingresar al método

    • Salida del método

      Activar punto de interrupción al salir del método

    Existe al menos una opción para la entrada y salida del método.

Punto de interrupción de propiedad

Haga clic en el encabezado del atributo para agregar un pequeño punto de interrupción de monitoreo de atributo similar a un ojo, que se utiliza para monitorear los cambios de lectura y escritura de un determinado atributo;

Más puntos de función

  • Condición

    Se utiliza para ingresar expresiones y filtrar.

  • Mirar

    • Acceso archivado

      Al leer esta propiedad (independientemente del momento de escribir)

    • Modificación presentada

      Al escribir esta propiedad (independientemente del momento de lectura)

Punto de interrupción de excepción

Los puntos de interrupción de excepción son una función que se utiliza a menudo durante el desarrollo y la depuración para localizar rápidamente la línea de código donde ocurre una excepción;

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-ih0sozbf-1652772313962) (https://cdn.jsdelivr.net/gh/ mbb2100/picgo_imgs/202205101906001.gif)]

Método de configuración:

  • El primer paso es utilizar teclas de acceso directo Ctrl + Shift + F8para abrir la ventana de configuración;
  • En el segundo paso, haga clic en +el número en la esquina superior izquierda;
  • El tercer paso es elegir Java Exception Breakpoints;
  • El cuarto paso es agregar excepciones que requieran puntos de interrupción, como por ejemplo: ArithmeticException;
  • El quinto paso es ejecutar Debug, cuando ocurra la excepción especificada, se ingresará el punto de interrupción;

Más puntos de función

  • Condición

    Se utiliza para ingresar expresiones y filtrar.

  • Mirar

    • atrapado en la excecion

      El punto de interrupción solo se activará si intenta detectar la excepción usted mismo.

    • Excesión no detectada

      Los puntos de interrupción solo se activarán si no intentas atraparte

Punto de interrupción temporal

Los puntos de interrupción temporales se refieren a puntos de interrupción que solo se activan una vez y luego se cancelan automáticamente; generalmente se usan en situaciones específicas en las que necesitamos confirmar que el valor está en línea con nuestras expectativas y luego ya no es necesario;

El proceso de configuración y demostración es el siguiente:

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-PWigZMM5-1652772313963) (https://cdn.jsdelivr.net/gh/ mbb2100/picgo_imgs/2022010222100.gif)]

Método de configuración:

  • El primer paso es establecer puntos de interrupción.
  • En el segundo paso, use las teclas de acceso directo Ctrl + Shift + F8para abrir la ventana de configuración;
  • El tercer paso es encontrar el punto de interrupción correspondiente;
  • Paso 4: Verificar Remove once hit;
  • El quinto paso es ejecutar la depuración: cuando el punto de interrupción se activa una vez, se cancelará automáticamente;

condición de punto de interrupción

Establecer las condiciones de activación para los puntos de interrupción también es una función que se usa a menudo al leer el código fuente y corregir errores. Por ejemplo, al leer el código fuente de Spring y estudiar el ciclo de vida del bean, puede establecer condiciones de punto de interrupción basadas en el nombre del bean para determinar el siguiente operación El punto de interrupción se ingresa solo cuando se especifica el objeto;

Ejemplo:

  1. Después del bucle for, el punto de interrupción se ingresará solo cuando i sea múltiplo de 2, que se puede completar en la Condición i % 2 == 0;

  2. Bucle 0-10000, cuando i es igual a 5000, ingrese el punto de interrupción, ignórelo en otros momentos, puede completar la condicióni == 5000

Proceso de configuración:

  • El primer paso es establecer puntos de interrupción.
  • El segundo paso es hacer clic derecho en el punto de interrupción y abrir la interfaz de operación.
  • El tercer paso es ingresar una expresión. Por ejemplo, cuando se realiza un bucle, solo un número par es el punto de interrupción. Puede ingresari % 2 == 0

simular excepción

Durante el proceso de desarrollo, a veces es necesario crear algunas excepciones artificiales, como operaciones de transacción (@Transactional), y es necesario verificar si se puede lograr el efecto de reversión;

Por ejemplo, el siguiente pseudocódigo:

// 伪代码 假如这里是个事务操作
// @Transactional
public void save() throws RuntimeException{
    
    
    table1Save();
    // 我先在这里测试一下,异常之后,是否会滚
    //throw new RuntimeException("异常了");
    table2Save();
    table3Save();
}

void table1Save(){
    
    }
void table2Save(){
    
    }
void table3Save(){
    
    }

Cuando queremos table2Save()lanzar una excepción durante la ejecución y revertir toda la operación, el enfoque habitual es lanzar una excepción artificialmente en el código:

throw new RuntimeException("异常了");

No hay nada de malo en hacer esto, pero no es muy elegante y hay dos problemas:

  • Las excepciones solo se pueden lanzar al final del método; si se lanzan en medio del proceso, el código posterior informará un error.

  • arriesgado

    Este tipo de función comercial genera excepciones artificialmente. Si accidentalmente olvida eliminar y enviar esta excepción, es un accidente de producción provocado por el hombre, que puede traer consecuencias graves;

IDEA simula elegantemente excepciones

¿Hay alguna forma mejor? IDEA nos proporciona una solución más optimizada para simular excepciones. Los pasos de operación son los siguientes:

Pasos:

  • El primer paso es agregar un punto de interrupción donde desea simular la excepción;
  • En el segundo paso, ejecute el código en modo de depuración e ingrese el punto de interrupción;
  • El tercer paso es encontrar el registro de punto de interrupción correspondiente en Frames;
  • Paso 4: haga clic derecho y seleccione Throw Execption;
  • Paso 5: Ingrese la excepción que desea generar y haga clic okpara generar la excepción correspondiente;

Depuración de subprocesos múltiples

Durante el desarrollo de subprocesos múltiples, la estrategia de programación de subprocesos no está controlada por el código, lo que hace que el proceso de depuración del punto de interrupción salte hacia adelante y hacia atrás entre subprocesos. Si la lógica es complicada, saltar puede ser engañoso; de la siguiente manera:

public class Main {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("0 main start");
        new Thread(() -> {
    
    
            System.out.println("1 hello");
        }, "thread1").start();

        new Thread(() -> {
    
    
            System.out.println("2 world");
        }, "thread2").start();

        System.out.println("3 main end");
    }
}

Si establece el punto de interrupción en System.out.println, excepto 0, que puede garantizar la primera salida, no se puede garantizar el orden de ejecución de 1, 2 y 3;

De forma predeterminada, los puntos de interrupción suspendse establecen en allun orden que no es fijo;

Si todos los puntos de interrupción suspendse establecen en Threaddespués, se ejecutarán uno por uno en el orden de los subprocesos:

Modificar variables

Modifique el valor de una variable durante el proceso del punto de interrupción; un escenario común es: cuando una variable cree que un error lógico hace que su valor sea diferente al esperado, pero no desea depurarlo todo nuevamente, puede depurarlo directamente en el depurador Modifique el valor de la variable durante el proceso y continúe ejecutando el proceso posterior;

Código/método/expresión de ejecución de punto de interrupción

Durante un punto de interrupción, puede ejecutar una sección de expresión, código o método

  • código

  • ejecución del método

  • expresión

depuración remota

Una habilidad muy práctica y especialmente equipada: cuando ocurre un error en el código en línea, puede usar este método de depuración remota para localizar y solucionar rápidamente el problema;

Nota: La depuración remota debe garantizar que las versiones del código local y del código en línea sean consistentes; de lo contrario, no se ingresará el punto de interrupción ;

Los pasos de configuración son los siguientes:

  • Agregue una interfaz para la depuración remota

    @RestController
    public class RemoteDebugController {
          
          
        @GetMapping("debug")
        public Integer debug(Integer p){
          
          
            System.out.println(p);
            return p;
        }
    }
    
  • Empaquetar el código en un paquete jar

    mvn clean package -Dmaven.test.skip=true
    

  • IDEA configura la configuración remota

    La siguiente es una descripción de varios parámetros importantes:

    • Nombre

      Nombre, no importante, complétalo como quieras;

    • Anfitrión

      La IP del proyecto remoto. Esta es una prueba local, así que simplemente complete 127.0.0.1. Para uso real, complete la dirección IP del servicio remoto.

    • PUERTO

      Puerto de depuración remota

    • Parámetros de JVM al ejecutar el servicio remoto

      La herramienta IDEA nos ayuda a generar parámetros JVM que deben agregarse cuando el servicio se está ejecutando, puede simplemente copiarlos y usarlos directamente;

      -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555
      
  • Proyecto de inicio

    Para fines de demostración, no lo iniciaremos aquí en IDEA, sino que iniciaremos el proyecto de prueba directamente en la ventana CMD.

    java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555 -jar spring-boot-001-hello-world-0.0.1-SNAPSHOT.jar
    

    Durante el proceso de inicio, aparece el registro de monitoreo de socket, lo que indica que es normal.

    Listening for transport dt_socket at address: 5555
    
  • Configuración de depuración remota de IDEA

  • prueba

    • El lado izquierdo es la consola donde se ejecuta el paquete jar.

    • La esquina superior derecha es la interfaz de IDEA.

    • La parte inferior derecha es el navegador, que simula las solicitudes de los clientes;

    Como se muestra abajo:

    Cuando el cliente inicia una solicitud, IDEA ingresará al punto de interrupción, cuando pase la ejecución, se puede ver que el registro correspondiente se imprimirá en la consola izquierda;

    Para la depuración en línea, asegúrese de agregar condiciones a los puntos de interrupción, como cuentas de prueba específicas para ingresar al punto de interrupción; evite permitir que solicitudes de usuarios reales ingresen al punto de interrupción, lo que afectará el uso del usuario;

    De esta manera, si el código remoto tiene errores, se puede depurar directamente en la herramienta IDEA local, lo cual es muy conveniente;

Más características

La mayoría de las funciones de depuración más utilizadas se enumeran arriba, pero esto no es todo: algunas funciones poco comunes se pueden seleccionar y utilizar según las necesidades.

En resumen, si quieres hacer bien tu trabajo, primero debes afilar tus herramientas. Si haces un buen uso de las herramientas, podrás obtener el doble de resultado con la mitad de esfuerzo. ¡Recógelas y empieza a usarlas!

Bien, eso es todo por compartir hoy, ¡gracias a todos por sus me gusta, sus publicaciones y sus colecciones!

Supongo que te gusta

Origin blog.csdn.net/lupengfei1009/article/details/124822556
Recomendado
Clasificación