Assumptions
- Mac OS environment
- Java 1.4.2 installed
- Tomcat 5.5.x installed together with Compat *.jar
- Maven installed and build.properties defined
- Eclipse 3.1.x installed
- MyEclipse 4.0.x installed (optional)
Setup
1. Environment: set JPDA variables (e.g., saved in .bash_profile)
Set the Java Debug Wire Protocol (JDWP) for the connection and the port the debugger will use to communicate with the JVM, typically port 8000. Add lines, save and restart system.
No Format |
---|
# Eclipse Debugging JPDA_TRANSPORT=dt_socket; export JPDA_TRANSPORT JPDA_ADDRESS=8000; export JPDA_ADDRESS |
However, I recently discovered that a certain application (unknown at present) is squatting on Port 8000 and preventing the debugger from launching. So I reset my JPDA address to Port 8001 and changed the port address in the Eclipse debugger and all is well again.
No Format |
---|
# Eclipse Debugging
JPDA_TRANSPORT=dt_socket; export JPDA_TRANSPORT
JPDA_ADDRESS=8001; export JPDA_ADDRESS
|
2. Tomcat: start in debug mode
No Format |
---|
arwhyte $ cd $CATALINA_HOME tomcat $ catalina.sh jpda start |
3. Eclipse: set breakpoint(s) in code and switch to Debug Perspective
Debug Perspective: Window > Open Perspective > Debug > Other > Debug
...
- Connect
- Name: SakaDebug
- Project: leave blank
- Connection Type: Standard (Socket Attach)
- Host: localhost
- Port: 8000 or 8001 (as defined above)
- Source
- Click
Add
and selectJava Project
icon - Click
Select all
projects (note to self only: deselect local database project) - Uncheck
Add exported entries of selected projects
(otherwise references to Maven_Repo, etc. are added)
#Common
#*Stay with defaults
- Click
- Click
Apply
(debug session should start, otherwise click Debug icon and click on named debug profile)
Sample debug sessions
Exampe I: Legacy-service walkabout
Set a breakpoint in org.sakaiproject.service.legacy.user.cover.UserDirectoryService
, specifically in method:
public static org.sakaiproject.service.legacy.user.User getCurrentUser()
Set a breakpoint in org.sakaiproject.component.legacy.realm.DbRealmService.java
public Set unlockRealms(String userId, String lock)
...
- named debug profile
...
Example II: Adding a user
Set a breakpoint in the UserDirectoryService.java
...
- )
...