variable modificar java_home entorno crear configurar java

java - modificar - variables de entorno linux



la fuente jdk de depuraciĆ³n no puede ver la variable de quĆ© se trata (5)

En caso de que alguien necesite esto con Tomcat . Debe configurar el argumento VM Djava.endorsed.dirs y colocar el jdk jar compilado en él. Puede hacer esta solución de cs o exportar con eclipse (toda la generación de compilador de clase de compilador Java utilizada por de depurador debe estar activa)

Vaya a Ejecutar Configuraciones> Argumentos> Argumentos de VM

Djava.endorsed.dirs = "/ your / folder / apache-tomcat-xxx / endorsed"

Estoy depurando la fuente JDK como:

public static int codePointAt(CharSequence seq, int index) { char c1 = seq.charAt(index++); if (isHighSurrogate(c1)) { if (index < seq.length()) { char c2 = seq.charAt(index); if (isLowSurrogate(c2)) { return toCodePoint(c1, c2); } } } return c1; }

y quiero ver c1 variable antes de entrar en if (isHighSurrogate(c1)) . Sin embargo, cuando depuro ver c1 variable, muestra:

Realmente he intentado agregar fuente rt.jar, y realmente puede entrar en el punto de corte de la fuente JDK, como:

pero ¿por qué la variable c1 no puede mostrarse?


En términos generales, para poder ver las variables al pasar por el código fuente de JDK, necesita que los archivos de clase se compilen con información de depuración, es decir compilar usando javac -g .

Entonces, lo mejor es encontrar una versión ya compilada con información de depuración (no pude encontrar nada para JDK 7) o puedes intentar compilar la fuente por ti mismo.

De acuerdo con esta publicación (tenga en cuenta que no lo he probado), no necesita compilar todas las fuentes, solo las que necesita. Colocando las clases recién compiladas en el $jdk/jre/lib/ ext / $jdk/jre/lib/ , las nuevas clases se usarían en su lugar las del original rt.jar .

Creo que eso debería hacerte comenzar.

Actualización: en realidad acabo de probar este proceso y no es nada difícil. Probado en Windows, JDK 1.7.0_11. Todos los comandos se invocan desde la línea de comandos:

  1. Crea tu carpeta de trabajo. Elegí la carpeta d:/ root
  2. Dentro de su carpeta de trabajo, cree la carpeta de origen, es decir, jdk7_src y la carpeta de salida jdk_debug
  3. Desde su carpeta JDK_HOME obtenga el archivo src.zip y descomprímalo dentro de jdk7_src
  4. Seleccione lo que compilará y elimine el resto. Para todos ellos puede necesitar pasos adicionales. He elegido las carpetas:
    • java
    • javax
    • org
  5. Desde su JDK_HOME/jre/lib obtenga el archivo rt.jar y rt.jar en la carpeta de trabajo (esto es solo por conveniencia para no especificar nombres de archivo demasiado grandes en la línea de comando).
  6. Ejecute el comando: dir /B /S /X jdk7_src/*.java > filelist.txt para crear un archivo llamado filelist.txt con la lista de todos los archivos java que se compilarán. Esto se dará como entrada a javac
  7. Ejecute javac usando el comando:
    javac -J-Xms16m -J-Xmx1024m -sourcepath d:/jdk7_src -cp d:/rt.jar -dd:/jdk_debug -g @filelist.txt >> log.txt 2>&1 Esto compilará todos los archivos en el jdk_debug y generará un archivo log.txt en su carpeta de trabajo. Verifique el contenido del registro. Deberías recibir un montón de advertencias pero ningún error.
  8. jdk_debug carpeta jdk_debug y ejecute el comando: jar cf0 rt_debug.jar * . Esto generará su nueva biblioteca de tiempo de ejecución con información degug.
  9. Copie ese nuevo jar a la carpeta JDK_HOME/jre/lib/endorsed . Si la carpeta endorsed no existe, créela.

Depure su programa en Eclipse. Observe cómo las variables se nombran normalmente (no más arg0, arg1, etc.). Feliz depuración :)



La solución cs jre / lib / endorsed es genial. Más fácil de construir es con Eclipse: crea un proyecto Java, coloca javax *, java * en src y deja que Eclipse compile. Luego exporta el jar.


Para que lo sepa, el mecanismo de anulación endosada está en desuso y se eliminará en una versión futura ( http://docs.oracle.com/javase/8/docs/technotes/guides/standards/ ).

Utilice este pom.xml para obtener fuentes JDK 1.8.0_111 con información de depuración:

<project> <modelVersion>4.0.0</modelVersion> <name>JDK sources with debug information</name> <groupId>ex.jdk.debug</groupId> <artifactId>jdk-debug-sources</artifactId> <version>1.8.0_111</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.oracle</groupId> <artifactId>jdk-rt</artifactId> <version>1.8.0_111</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</version> <configuration> <debug>true</debug> <debuglevel>lines,vars,source</debuglevel> <source>1.8</source> <target>1.8</target> <excludes> <exclude>com/sun/java/swing/**</exclude> <exclude>com/sun/source/util/**</exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>

Tendrás que hacer una instalación manual del rt.jar original para poder ejecutar mvn clean install

mvn install:install-file -Dfile=rt.jar -DgroupId=com.oracle -DartifactId=jdk-rt -Dversion=1.8.0_111 -Dpackaging=jar

El rt.jar que copié en el directorio endorsed es el rt.jar original pero con las clases originales reemplazadas por las clases que rt.jar generar.