# Debugging Support

This section covers the following topics:

- How to Debug Applets in Java Plug-in
- Java Console
- Java Plug-in Trace File
- javaplugin.trace property
- java.security.debug property
- Documentation
- Isolating Bugs
- Submitting Bug Reports
- Submitting Feature Requests
- Java Plug-in Feedback Alias

The purpose of this document is to simplify the debugging of applets. It provides techniques and suggestions for developing applets in Java Plug-in and describes some common errors encountered in applet development.

## How to Debug Applets in Java Plug-in

Applets should be debugged using the java debugger utility jdb. Also make sure to compile your .java files with -g option with javac. To begin debugging your applet:

1. Open Java Control Panel. Click Java > View. Specify the following parameters in the Java Runtime Parameters with each parameter separated by a comma as follows:

       -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n

   See JPDA Connection and Invocation for the details on the possible runtime parameters for debugging.

2. Start Internet Explorer or Mozilla browser and load the page which contains the applet to be debugged. Make sure the applet code has been compiled with -g option of javac.
3. Run the command jdb -attach <address> in a DOS command prompt. <address> is the name mentioned in the step. For example, if <address> is jdbconn, you will run the command as

       		  jdb -attach jdbconn

   To learn more about the Java Debugger (jdb), see The Java Debugger.
4. Once the jdb is attached to the VM, you can set up breakpoints in the applet.
5. When the applet in the browser reaches the breakpoint, it will stop executing, and you will see the debugger waiting for your input to continue debugging.

When debugging applets in Java Plug-in, make sure that only one instance of the browser is being used for debugging using the same connection address at the same time. Otherwise, it will result in a conflict, since the Java Runtime for each instance of the browser will try to gain exclusive access to the connection address. To debug applets in both Internet Explorer and supported Mozilla browsers, run either Internet Explorer or supported Mozilla browsers with Java Plug-in—but not both at the same time.

Debugging applets in Java Plug-in with Active Desktop is discouraged because an instance of Internet Explorer will always be running in the desktop process during the lifetime of the user session.

You can use other debuggers from IDEs like Borlands JBuilder or Symantec's VisualCafe, instead of jdb. To use these debuggers, you will need to change the project option in these IDEs to attach Java Plug-in in the browser process on the same machine or remote machine. Different Java Runtime Parameters may also be required in the Java Control Panel. For more information, refer Java debugger or IDE manuals.

## Java Console

Java Console is a simple console window for redirecting all the `System.out` and `System.err` messages. The console window is disabled by default. It can be enabled from the Java Control Panel or the task bar. If the console is enabled, you will see the console window appear when Java Plug-in is used in the browser. For more information on Java Console see Java Console documentation.

For information on Java Console see the Java Console section of the Deployment Guide.

## Java Plug-in Trace File

The Java Plug-in trace file records all the debug, System.out, and System.err messages. The trace file is disabled by default but is automatically enabled when the Java Console is enabled. The trace file is located by default at `C:\Documents and Settings\<username>\Application Data\Sun\Java\Deployment\log` in the `user.dir`. The trace file has the naming convention `.plugin<version>.trace` where <version> indicates the version of Java installed on the system.

The `user.dir` directory contains various log and trace files. In Windows 2000 and Windows XP this file is located at the following location:
`C:\Documents and Settings\<username>\Application Data\Sun\Java\Deployment.`

The Application Data folder and its contents are hidden by default in Windows.

## `javaplugin.trace` property

This property controls whether Java Plug-in prints its trace messages during execution. This is useful to applet developers to determine what is occuring within Java Plug-in. To enable tracing follow the steps given below:

- Open Java Control Panel
- Click Advanced > Debugging
- Select Enable Tracing checkbox .

## `java.security.debug` property

This property controls whether the security system of the Java Runtime Environment prints its trace messages during execution. This is usful when a security exception is thrown in an applet or when a signed applet is not working. The following options are supported:

- `access` — print all `checkPermission` results
- `jar` — print jar verification information
- `policy` — print policy information
- `scl` — print permissions `SecureClassLoader` assigns

The following options can be used with `access`:

- `stack` — include stack trace
- `domain` — dumps all domains in context
- `failure` — before throwing exception, dump the stack and domain that didn't have permission

For example, to print all `checkPermission` results and dump all domains in context, perform the following actions:

- Open Java Control Panel
- Click Java > View. The Java Runtime Settings dialog box is displayed.
- Type `-Djava.security.debug=access:stack` in the Java Runtime Parameters field.

## Documentation

Java Plug-in provides a rich set of documentation to help developers use the various features of Java Plug-in. The documentation includes a FAQ, which includes some of the most frequently asked questions by developers. Make sure you read and understand these documents before applet development, as it may save you hundreds of hours in debugging.

## Isolating Bugs

Although Java Plug-in provides the Java 2 Runtime Environment within Internet Explorer and supported Mozilla browsers, most of the facilities are provided by the Java 2 Runtime itself, rather than by Java Plug-in. Therefore, if a problem occurs in Java Plug-in, it may be either a problem in Java Plug-in, the Java 2 Runtime itself or a user error. It is extremely important to determine where bugs originate, as it will affect the speed of bug evaluation and fixing. Here are some suggestions for isolating bugs:

1. Run the applets in both Internet Explorer and supported Mozilla browsers through Java Plug-in.
2. Run the applets in `appletviewer`. Java Plug-in is mainly derived from `appletviewer` and has inherited problems from `appletviewer` as well. This step should be performed only if the applet doesn't require specific browser facilities that Java Plug-in provides, like HTTPS or RSA signing.
3. If the applet fails in `appletviewer`, it is likely the problem is in the Java 2 Runtime Environment—and not in Java Plug-in.
4. If the applet fails in only one of the browsers, IE or supported Mozilla browsers, it is likely a Java Plug-in problem.
5. If the applet fails in both browsers but not `appletviewer`, it could be either a Java Plug-in problem or user error. Please examine the applet code to see if it makes any assumptions about the execution environment. For example, in `appletviewer` the current directory is set to the current directory in the shell when `appletviewer` is launched, whereas the current directory in Java Plug-in may be set to the browser's directory. Therefore, loading resources from the current directory may work in `appletviewer` but not in Java Plug-in.
6. Try to reproduce the problem on other machines or platforms. In some cases, the root of the problem may be in the machine configuration, e.g., an improper DNS setup.
7. If you have identified the problems in the Java 2 Runtime Environment or Java Plug-in, please follow the instructions in the next section to submit a bug report to the appropriate product categories.

## Submitting Bug Reports

To submit a bug report, go to the Java Development Connection's Bug Database . Before submitting a bug, search the BugParade to determine if the bug has already been reported. In some cases, a workaround may also have been suggested. If the bug is not already reported, submit a new bug report to the Java Plug-in team. In the bug report, include the following information:

- Complete description of the problem and step-by-step instructions for reproducing it;
- Error messages captured by Java Console or trace file;
- Proxy configuration information, e.g., auto proxy configuration with proxy configuration file attached;
- Browser and platform information, e.g., supported Mozilla browsers on Win 2000;
- A test case demonstrating the problem;
- Specify whether the problem occurs in other browsers and `appletviewer`;
- Specify any workaround available;
- Specify personal information—your name and email address—so you may be contacted if additional information is required.

## Submitting Feature Requests

To submit a feature request, do so through the Report A Bug or Request a Feature page.In the feature request, please make sure the following information is included:

- Complete description of the requested feature;
- How this feature will improve the quality of your product or Java Plug-in in general.

## Java Plug-in Feedback Alias

The purpose of the Java Plug-in Feedback alias, java-plugin-feedback@sun.com, is for customers to provide feedback on product features and the product in general. This alias is not intended for bug report submission. To submit a bug report, please follow the instructions given above.