Las habilidades de depuración de IDEA Debug más prácticas en toda la red (caso súper detallado)

contenido

prefacio

texto

Escenarios de uso comunes para Debug

Operación básica

Puntos de ruptura de línea

Punto de interrupción del método

Puntos de vigilancia de campo

Puntos de interrupción de excepción

Excepción de lanzamiento activo

Caída de marco

Condición de punto de interrupción (Condición)

Forzar retorno

Depuración de transmisión (Rastrear la cadena de transmisión actual)

Evaluar expresión

Depuración remota (depuración remota de JVM)

Tutorial de depuración remota

Depuración multiproceso (suspender)

Ejecución del modo de subprocesos

Ejecución de todos los modos

Avance de depuración

Lectura recomendada


prefacio

Debug es un artefacto de desarrollo para programadores que puede ayudarnos a trabajar, estudiar y solucionar problemas de manera muy eficiente. Para decirlo sin rodeos, es una habilidad importante que determina nuestro avance a un nivel superior.

Hoy compartiré con ustedes los diversos trucos y trucos de la depuración de depuración en IDEA.

Hay una versión en video del contenido de este artículo. Los estudiantes a los que les gusta ver videos pueden verlo directamente a través del código QR a continuación. Si tiene dudas sobre el contenido del artículo, puede ver primero el contenido correspondiente del video, que puede ser más detallado.

Las habilidades de depuración de IDEA Debug más prácticas en toda la red (caso súper detallado) icono-predeterminado.png?t=M3K6https://www.bilibili.com/video/BV1xa411Y72S?spm_id_from=333.999.0.0

texto

Escenarios de uso comunes para Debug

  • Prueba de código de requisitos: solo a través de la depuración puede saber cómo se está ejecutando su código y es más fácil encontrar problemas

  • Solución de problemas: siempre que pueda ingresar la depuración del proceso del problema, no hay problema que no se pueda verificar.

  • Aprendizaje del código fuente: El código fuente suele ser muy grande, a través de Debug podemos saber más claramente dónde está la ejecución y los datos variables durante la ejecución.

Operación básica

Pasar por encima: el programa ejecuta una línea hacia abajo

Ingrese: Ingrese al método, puede ingresar el método personalizado o el método de biblioteca de terceros, el método JDK no puede ingresar 

Forzar paso a paso: Forzar paso al método, por lo general puede usar Paso a paso cuando no puede entrar. 

Salir: método de salida, utilizado junto con (forzar) entrar 

Reanudar programa: reanudar la ejecución del programa, ejecutar hasta el siguiente punto de interrupción

Las cinco operaciones corresponden a 1-5 en la siguiente figura de arriba a abajo, que también son las operaciones básicas más utilizadas en Depuración.

Puntos de ruptura de línea

Icono: círculo rojo

Función: el punto de interrupción más utilizado, pausa en la línea donde se encuentra el punto de interrupción.

En teoría, siempre que haya puntos de interrupción de línea y las operaciones básicas anteriores, la mayor parte de la depuración de depuración se puede completar, pero en muchos escenarios solo se usan estas funciones y la depuración es muy ineficiente. turno Habilidades de depuración.

Punto de interrupción del método

Icono: diamante rojo

Función: Suspender automáticamente en la entrada (entrada) y salida (salida) del método. Hacer una pausa en la entrada del método nos permite depurar todo el método desde el principio, y hacer una pausa en la salida del método nos permite ver los datos de cada variable en el método cuando se ejecuta el método.

A veces hay muchas clases de implementación en una de nuestras interfaces. Es difícil para nosotros analizar qué clase de implementación se está ejecutando en poco tiempo. En este momento, podemos usar puntos de interrupción de método. Ponemos el punto de interrupción en el método de interfaz y lo ejecutamos para el método Cuando, saltará automáticamente a la clase de implementación real , sin analizar la clase de implementación a través del entorno de contexto.

Desventaja: puede reducir en gran medida la velocidad de depuración

Puntos de vigilancia de campo

Icono: ojo rojo

Función: pausa cuando se cambia un campo (predeterminado) o se accede (requiere configuraciones adicionales).

Si queremos saber cuándo se modifica una propiedad, es demasiado problemático comenzar la depuración desde la entrada, podemos poner directamente un punto de interrupción de campo en el campo, de modo que el campo se pause automáticamente cuando se modifique.

Y si queremos hacer una pausa cuando se accede al campo, podemos hacer clic derecho en el punto de interrupción del campo y marcar [Acceso al campo].

Puntos de interrupción de excepción

Icono: rayo rojo

Función: puede hacer una pausa donde se lanza una excepción

Los puntos de interrupción de excepción no necesitan romperse en un código específico, pero se agregan directamente en la página de detalles del punto de interrupción.Durante la ejecución posterior, si se lanza la excepción que escuchamos, se detendrá automáticamente en el lugar donde se lanzó la excepción.

Excepción de lanzamiento activo

Icono: Ninguno, haga clic con el botón derecho en la pila de fotogramas para mostrar

Función: lanzar activamente la excepción especificada

En el ejemplo anterior, construimos una excepción a través del código, pero este método en realidad es un inconveniente, especialmente si queremos generar una excepción en el entorno remoto, necesitamos modificar el código y volver a implementarlo, y luego modificarlo después de la prueba. Vuelve y despliega de nuevo. Throw Exception puede lanzar una excepción directamente, evitando estos tediosos procesos.

Caída de marco

Icono: como se muestra a continuación

Función: cuando depuramos del método A al método B, podemos volver a antes de llamar al método B quitando el marco (desencuadre), para que podamos volver a llamar al método B.

Por lo general, se usa cuando estamos a punto de ejecutar el método B y descubrimos que nos hemos saltado un proceso importante. Si queremos volver a verlo, podemos volver primero al método A y luego ingresar al método B nuevamente.

Sabemos que la ejecución y el final del método en la JVM corresponden al apilamiento y la extracción del marco de la pila, por lo que el marco de la pila describe el modelo correspondiente al método, y la caída del marco (marco posterior) corresponde al respaldo del método anterior. .

Condición de punto de interrupción (Condición)

Icono: como se muestra a continuación

Función: cuando el programa se ejecuta hasta la posición del punto de interrupción, necesita que la expresión en la Condición devuelva verdadero para hacer una pausa; de lo contrario, se saltará directamente.

Se utiliza para evitar perder tiempo en procesos en los que no desea concentrarse cuando hay demasiadas ejecuciones en el lugar donde se encuentra el punto de interrupción. Por ejemplo, tenemos un problema con la inicialización de un bean Spring. Si queremos omitir el proceso de inicialización de otros beans, podemos establecer la expresión beanName.equals("") en la entrada de inicialización para lograr la pausa solo cuando el Se ejecuta el bean que nos importa.

Forzar retorno

Icono: como se muestra a continuación

Función: Finaliza a la fuerza el proceso de ejecución del programa actual y regresa directamente.

Cuando realizamos la depuración y descubrimos que se escribirán datos incorrectos en la base de datos si continuamos con la ejecución, podemos usar Force Return para finalizar por la fuerza el proceso actual.

Y si lo finalizamos mediante el botón Detener, el proceso de Depuración finaliza en este momento, y el flujo del programa seguirá ejecutándose, escribiendo así los datos del error en la base de datos.

Depuración de flujo ( Cadena de flujo actual de seguimiento )

Icono: como se muestra a continuación

Función: cuando hacemos una pausa en la línea de código de procesamiento de Stream, podemos mostrar todo el flujo de procesamiento de Stream en forma de interfaz gráfica.

El uso razonable de Stream hará que nuestro código sea más conciso, pero hay mucho abuso de Stream. Stream en sí es relativamente abstracto, y mucho abuso hará que el código de Stream sea difícil de entender y depurar.

Cuando encontramos que el problema está en el flujo de procesamiento de Stream, podemos usar esta función para ver los datos antes y después de que se procese cada paso, lo que nos resulta conveniente para ubicar y solucionar qué paso es el problema.

Ejecutar expresión ( Evaluar expresión )

Icono: calculadora, como se muestra a continuación

Función: se utiliza para ejecutar un fragmento de código que escribimos en tiempo real, como ver datos y modificar datos.

Cuando estamos probando y descubrimos que es difícil que cierta parte de la lógica del código tenga datos calificados, podemos modificar directamente los datos a través de esta función para acelerar nuestras pruebas.

Esta función es muy poderosa, podemos realizar cualquier lógica aquí, por ejemplo: podemos guardar datos en la base de datos, podemos enviar una solicitud RPC, etc.

Depuración remota (Depuración remota de JVM )

Icono: como se muestra a continuación

Función: código de depuración implementado en un servidor remoto.

El caso de uso más común para la depuración remota es solucionar problemas en línea. Aquí hay un ejemplo.

Hay una excepción cuando un usuario (userId=8888) solicita una interfaz, pero otros usuarios son normales, incluidas nuestras diversas cuentas de prueba.

En este punto, podemos usar la cuenta de prueba (ID de usuario = 1222) para iniciar una solicitud a la interfaz en el entorno de prelanzamiento, interceptaremos la solicitud en la entrada de la interfaz a través de la depuración remota y luego ejecutaremos la función de expresión. para cambiar el ID de usuario de 1222, modifíquelo a 8888, luego podemos simular al usuario con el problema para depurar toda la interfaz, lo que nos ayuda a localizar rápidamente el problema.

Nota: El entorno donde se usa la depuración remota no debe ser accesible para la red externa, de lo contrario, puede haber riesgos de seguridad.

Tutorial de depuración remota

Las diferentes versiones de depuración remota requieren diferentes parámetros de configuración, y puede ver los parámetros correspondientes a diferentes versiones a través de Idea.

Parámetros de configuración necesarios para cada versión: 

// JDK1.3 or earlier
-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
// JDK1.4
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
// JDK5-8:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
// JDK9 or later 
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

Hay dos métodos principales de configuración:

1) Usa el comando de inicio 

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar java-study-demo-0.0.1-SNAPSHOT.jar

2) Agregue la configuración anterior al script de inicio

Lo siguiente simula un proceso localmente:

1) Simule el inicio de un servicio, utilizando los parámetros de depuración remota para iniciar

2) Envíe la solicitud a través del navegador, puede ver que debido a que estamos depurados en este momento, habrá un ícono en la esquina superior izquierda esperando en círculos

3) Puede ver que la solicitud es efectivamente interceptada por nosotros, y luego podemos depurarla como una depuración local

Depuración multiproceso (suspender)

Icono: como se muestra a continuación

Suspender tiene dos modos: Todo y Subproceso.

Subproceso: Suspender el subproceso entrando en el punto de interrupción sin afectar la ejecución de otros subprocesos. Todos los subprocesos que ingresan al corte de energía se depuran a su vez.

Todos: Pausa todos los hilos. Solo se puede depurar el primer subproceso suspendido.

Si la segunda mitad de los dos modos aquí es difícil de entender, puede ver el caso en mi video para ayudar a entender.

Ejecución del modo de subprocesos

A través del contenido de salida, puede ver que el subproceso 1 está bloqueado y que tanto el subproceso 2 como el subproceso principal han terminado de ejecutarse

Ejecución de todos los modos

Se puede ver que el subproceso 2 y el subproceso principal no usan puntos de interrupción, pero también están suspendidos porque no hay salida.

Avance de depuración

El último no es realmente un truco, pero quería compartir alguna experiencia contigo.

Hay un dicho: las personas que son mejores que tú no dan miedo, lo que da miedo es que las personas que son mejores que tú son más eficientes para aprender y trabajar que tú.

De esta manera, es realmente difícil para nosotros alcanzar a aquellos que son mejores que nosotros. Porque son mejores que nosotros, y luego más eficientes que nosotros. Por lo tanto, debemos hacer todo lo posible para mejorar la eficiencia de algunos de nuestros estudios y trabajos.

Entre los ejemplos de los que hablo hoy, creo que debería haber algunos que no hayas usado o de los que no hayas oído hablar.

Pero a través de mi introducción anterior, podemos encontrar que cada técnica de depuración en este artículo en realidad puede desempeñar un papel determinado en diferentes escenarios y mejorar nuestra eficiencia. Si es menos, puede aumentar unos minutos, puede ser el momento de volver a ejecutarlo, si es más, puede ser unas horas o incluso unos días. Incluso si no usa estas habilidades para algunos problemas, en realidad es difícil solucionarlos.

Por lo tanto, dominar estas habilidades es realmente muy necesario para el desarrollo de Java. Así que te sugiero que aún dediques algo de tiempo a esto. Debido a que estas habilidades son realmente muy fáciles de dominar, es posible que solo necesites leerlas una o dos veces. Entonces probablemente sepas que existen estas cosas, y luego las aplicas en tu futuro estudio y trabajo, y luego la práctica hace la perfección, y luego se convierte en lo tuyo. Habrá diferencias en tu estudio y trabajo posteriores. Pequeña ayuda.

Lectura recomendada

Entrevistador: Cómo ajustar JVM (con casos reales)

Preguntas de entrevista básicas de alta frecuencia de Java (la última versión en 2021)

Preguntas de entrevista de alta frecuencia de Java Collection Framework (última versión de 2021)

Primavera, una entrevista imprescindible, ¿entiendes?

La entrevista debe preguntar a MySQL, ¿entiendes?

Supongo que te gusta

Origin blog.csdn.net/v123411739/article/details/124373964
Recomendado
Clasificación