working ver sirve que para oxygen online not intellij how debugger debug como java debugging

ver - java debugger online



¿Qué hace la opción de información de depuración de javac-g: vars? (2)

De los javadocs:

-g Genera toda la información de depuración, incluidas las variables locales. Por defecto, solo se genera el número de línea y la información del archivo fuente.

Esto no produce resultados visibles en el momento de la compilación, pero se utiliza en la depuración durante el tiempo de ejecución.

¿Qué es exactamente la opción -g:vars (información de depuración de variable local) de javac proporciona como salida?

Al hacer algunas pruebas, no hay información adicional (por ejemplo, no hay diferencia entre -g: fuente, líneas y -g: fuente, líneas, vars).

¿Alguien tiene un ejemplo de una información de depuración de estas variables locales?


La opción -g:vars insertará una LocalVariableTable en su archivo de clase. Por ejemplo, con esta clase de prueba:

public class Test { public static void main(String[] args) { int mylocal = 1; System.out.println("" + mylocal); } }

Puede echar un vistazo a la información de depuración en el archivo de clase con javap -l Test . Sin argumentos -g , solo hay una LineNumberTable. Esto es lo que utiliza la JVM para generar los números de línea que se ven en los stacktraces. Si compilas con -g:vars , te darás cuenta de que ahora hay una tabla local de variables que se ve así:

LocalVariableTable: Start Length Slot Name Signature 0 3 0 args [Ljava/lang/String; 2 1 1 mylocal I

Esto captura el nombre y el tipo de cada parámetro y variable local por su posición en la pila.

Normalmente no necesita esto para la depuración si tiene la fuente disponible. Sin embargo si no tienes la fuente puede ser útil. Por ejemplo, ejecute jdb Test con y sin -g:vars :

Initializing jdb... > stop in Test.main Deferring breakpoint Test.main. It will be set after the class is loaded. > run main[1] next main[1] next main[1] locals Method arguments: args = instance of java.lang.String[0] (id=354) Local variables: mylocal = 1

Solo obtendrás la lista de locales si la clase fue compilada con -g:vars .