Debugging a Tomcat Application
I primarily develop web applications but have been out of it for a while and needed to look at old code for a reminder. Well here is how I configure a project to debug in tomcat.
There are two parts to debugging the application
- Configuring the Maven Cargo plug-in. (Deploys the project to Tomcat with debug args)
- Attaching Eclipse to a remote process.
Configure Maven Cargo
| Setting | Description | 
|---|---|
| ${cargo.wait} | Setting cargo.waitto true will pause tomcat once it’s started so you can debug | 
| ${catalina.home} | catalina.homeshould point to the home folder of tomcat/opt/tomcat/ | 
| ${project-name} | The name of the project and war name. | 
<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <configuration>
        <wait>${cargo.wait}</wait>
        <container>
            <containerId>tomcat6x</containerId>
            <type>installed</type>
            <home>${catalina.home}</home>
        </container>
        <configuration>
            <home>target/tomcat6x</home>
            <properties>
                <!-- Debug Mode On -->
                <cargo.jvmargs>-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC</cargo.jvmargs>
                <!-- Debug Mode Off -->
                <!--<cargo.jvmargs>-Xnoagent -Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC</cargo.jvmargs>-->
            </properties>
            <deployables>
                <deployable>
                    <location>target/${project-name}.war}</location>
                    <pingURL>http://localhost:8080/${project-name}</pingURL>
                    <properties>
                        <context>${project-name}</context>
                    </properties>
                </deployable>
            </deployables>
        </configuration>
    </configuration>
</plugin>
Attach to Remote Process
Create a new Debug Configuration in Eclipse
- Click on Run -> Debug Configurations
- Select Remote Java Application
- Press the ‘New’ Button
- Give it a name like ‘MyWebApp’
- Click Browse to select the Project that has the code you want to debug
- Make sure the Port matches what was configured in Cargo. In this case port 8787
Putting it Together
To debug just do the following now:
- From the command line in the project run
    mvn -Dcargo.wait=true cargo:start
- From eclipse select Debug - MyWebApp
There you go, the project can now be launched and debugged in tomcat.
