Debugging Uninstallers
To perform uninstallation, IzPack goes through three phases, each involving a separate process.
The following describes how to remotely debug each of these phases.
Phase 1
This phase:
Extracts the jar to a temporary directory
Spawns a new process for Phase 2, referencing the temporary directory as the classpath; and
Exits
Its invoked by running:
java -jar MyApp/Uninstaller/uninstaller.jar
To debug this phase:
Place a breakpoint in com.izforge.izpack.uninstaller.Uninstaller.main(String[] args)
Run the command with the appropriate debug agent settings
Attach to the process in the debugger
E.g.:
java -jar -Xdebug -Xrunjdwp:transport=dt_shmem,address=jdbconn,server=y,suspend=y MyApp/Uninstaller/uninstaller.jar
Phase 2
This phase:
Spawns a new process for Phase 3
Waits for it to complete
Deletes the temporary directory containing the classes extracted in Phase 1
To debug this phase,:
Place a breakpoint in com.izforge.izpack.util.SelfModifier.main(String[] args)
Define the self.mod.debugPort2 property, which specifies the debug port to listen on
Attach to the process in the debugger using socket transport, and the port above
E.g.: java -jar -Dself.mod.debugPort2=8002 MyApp/Uninstaller/uninstaller.jar
Phase 3
This phase performs the actual uninstallation.
To debug this phase:
Place a breakpoint in com.izforge.izpack.util.SelfModifier.main(String[] args)
Define the self.mod.debugPort3 property, which specifies the debug port to listen on
Attach to the process in the debugger using socket transport, and the port above
E.g.: java -jar -Dself.mod.debugPort3=8003 MyApp/Uninstaller/uninstaller.jar