Preparations
For all Java subsystem debugging, installing the symbols package java-1.6.0-openjdk-debuginfo is essential. All debuginfo sub-packages reside in own repository which needs to be enabled for installation at least. An example yum command:
# yum install --enablerepo=fedora-debuginfo -y java-1.6.0-openjdk-debuginfo
Fedora release > 15
Since Fedora 15, Java console has been removed from Firefox Web developer tools add-on and it hasn't existed in the browser itself for some time. Related mozilla.org bugs:
- Bug 511884 - SeaMonkey 2.0/2.1 (Conditionally) Remove obsolete 'Java Console' item
- Bug 460244 - Unable to open Java Console after installing JRE6u10
Background for this change was that nowdays there can be more than one JVM instance connected to a web browser and thus console feature was moved to JVM itself. Command:
# yum install --enablerepo=fedora-debuginfo -y icedtea-web
would install console support. There is also packages icedtea-web-debuginfo and icedtea-web-javadoc.
Standard Output / Standard Error Output
Firefox detected plugin list can be seen by typing the url:
about:plugins
Firefox can be run in debug mode as follows:
$ ICEDTEAPLUGIN_DEBUG=true firefox 2>&1 | tee console.log
This will write the standard output also to a file.
Browser plugin also writes files under user's
~/.icedteaplugin/java.stdout ~/.icedteaplugin/java.stderr
All these files are valuable information which can/should be attached to a bug reports.
Attaching a debugger
When running in debug mode (with ICEDTEAPLUGIN_DEBUG=true), it is also possible to attach a debugger to JVM process, thus allowing stepping through applet code and the plugin code itself.
Once the applet is loaded, just attach the debugger of your choice to port 8787, and you can then set breakpoints in the applet code.
Sometimes it may be necessary to debug the applet's init function. To to do that, first load a simple (working) applet in the browser. If you load http://www.gnu.org/software/classpath/, that should do it (the top left corner has an applet). This will start the JVM, allowing you to attach a debugger to it. Once the debugger is attached, you can set up breakpoints in the applet code and then proceed to load the applet. If you are using the NP plugin (default in Fedora 13 and higher), you need to load your applet applet in another tab. Loading it in the same tab will not work, as the VM will be shutdown as soon as the previous page closes to load the new one.
Java Console
OpenJDK does not ship the Java console anymore, but one can be found from Firefox Web Developer add-on which is installed separately to the Firefox. Add-ons are installed using Firefox's own software component management system, not Fedora's RPM.
Once Web Developer add-on has been installed, it can be activated from:
View --> Toolbars --> Web Developer Toolbar
and that will open a new toolbar above the browser's rendering area. Java Console can be then opened from:
Tools --> Java Console
Fedora release > 15
Console has moved to icedTea itself (requires icedtea-web package). Activating the console can be done with gui-tool:
Program menu --> Settings --> IcedTea Web Control Panel
Console can for example list detailed information about the environment which can be useful for bugreporting:
System Properties: http.agent: Java(tm) 2 SDK, Standard Edition v1.6.0_0 package.restrict.definition.java: true java.version.applet: true java.runtime.name: OpenJDK Runtime Environment sun.boot.library.path: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64 java.vm.version: 14.0-b16 browser: sun.applet.AppletViewer java.vendor.applet: true java.vm.vendor: Sun Microsystems Inc. java.vendor.url: http://java.sun.com/ path.separator: : java.vm.name: OpenJDK 64-Bit Server VM file.encoding.pkg: sun.io file.separator.applet: true user.country: US sun.java.launcher: SUN_STANDARD sun.os.patch.level: unknown os.version.applet: true java.vm.specification.name: Java Virtual Machine Specification user.dir: /home/tuju/Documents java.runtime.version: 1.6.0_0-b16 java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment java.endorsed.dirs: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/endorsed os.arch: amd64 browser.version: 1.06 javax.accessibility.assistive_technologies: org.GNOME.Accessibility.JavaBridge line.separator: java.io.tmpdir: /tmp java.vm.specification.vendor: Sun Microsystems Inc. os.name: Linux java.class.version.applet: true sun.jnu.encoding: UTF-8 java.library.path: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/amd64:/usr/lib64/firefox-3.5.5:/usr/lib64/firefox-3.5.5/plugins:/usr/lib64/firefox-3.5.5:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib java.class.version: 50.0 java.specification.name: Java Platform API Specification path.separator.applet: true sun.management.compiler: HotSpot 64-Bit Server Compiler package.restrict.definition.sun: true os.arch.applet: true os.version: 2.6.30.9-96.fc11.x86_64 browser.vendor: Sun Microsystems Inc. user.home: /home/tuju user.zoneinfo.dir: /usr/share/javazi user.timezone: Europe/Tallinn java.awt.printerjob: sun.print.PSPrinterJob line.separator.applet: true java.specification.version: 1.6 file.encoding: UTF-8 java.class.path: . user.name: tuju os.name.applet: true java.vm.specification.version: 1.0 java.home: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre sun.arch.data.model: 64 user.language: en java.specification.vendor: Sun Microsystems Inc. java.vm.info: mixed mode java.version: 1.6.0_0 java.ext.dirs: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext:/usr/java/packages/lib/ext sun.boot.class.path: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/resources.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/rt.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/jce.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/rhino.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/classes java.vendor: Sun Microsystems Inc. file.separator: / java.vendor.url.bug: http://java.sun.com/cgi-bin/bugreport.cgi sun.io.unicode.encoding: UnicodeLittle sun.cpu.endian: little java.vendor.url.applet: true sun.cpu.isalist:
Test URLs
Fedora's JRE in browser environment can be tested using the following test pages:
- http://www.java.com/en/download/help/testvm.xml
- http://java.com/en/download/installed.jsp?detect=jre&try=1
Note that those pages itself are sad examples of compliance of specifications: buggy or buggier - if you know any better pages, change them here.