我前面大多数文章都是以Tomcat源代码为基础,分析其某个功能的实现等细节,最近有不少朋友在群里询问怎样调试Tomcat的源码,今天以Tomcat源码为例,来总结下源码调试的方式。
例如问题的处理过程,大致是发现问题,分析问题,解决问题。源码的调试我们简单总结下:
获取源代码
Tomcat的源代码下载方式也比较多
从github上下载(https://github.com/apache/tomcat)
从Tomcat的SVN服务器下载(http://svn.apache.org/repos/asf/tomcat/)
从Tomcat官网下载(http://tomcat.apache.org/download-80.cgi)
每个版本的下载页最下方都会有对应的源码压缩包供下载,如下图
将源码导入IDE
这个工作每个Developer应该都没有问题,我们不过多写这个。
添加依赖
导入到IDE之后,许多文件都会提示红X,提示缺少依赖的jar文件。此时可以通过添加系统中已有的相关文件,如果是此Maven形式组织工程,可以直接添加相应的依赖。
运行应用
这一步需要先找到应用的入口,即Main-Class,之后执行该类即可。当然,有些应用在运行时需要必要的输入参数,Tomcat就需要指定catalina.home。
这类入口应用,可以通过以下方式寻找:
如果应用是以jar文件的形式提供,那么在它的META-INF目录内下会有一个
MANIFEST.MF文件。该文件中可以指定类似如下的内容:
如果jar文件中没指定,或者应用是以脚本的形式启动,可以从脚本中寻找其默认执行的类,例如Tomcat的启动脚本catalina.bat中,就包含这样的内容:
set MAINCLASS=org.apache.catalina.startup.Bootstrap
通过上述方式确定主类之后,根据需要配置相应的VM参数及应用自身的参数,代码就跑起来了。之后根据想要了解的内容,设置断点,开启Debug之旅吧。
以上是通用的步骤,具体到Tomcat,我们来谈一起具体的方式方法。
以工程形式调试
以Eclipse为例
首先创建一个工程Java工程。
导入源码文件,此处可以有如下方式:
全部拷贝进来
以link source方式引入。(右击项目,在build Path中选择Link source)
将已安装的Tomcat的lib下的jar文件添加到项目依赖中,再添加其它需要的jar文件,例如ant.jar
设置主类
设置参数
点击Debug,程序跑起来了,开始调试吧。
以Attach方式调试
新建工程,将源码导入。此时可以把Tomcat以debug的方式启动。为了在第一时间将代码Attach到进程中,需要设置jpda启动后自动暂停,等待应用连接。
可以在脚本文件catalina.bat中直接设置
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
直接把上面红色内容改成y即可,也可以先在命令行中设置一下
之后执行命令
catalina.bat jpda start
默认的连接端口是8000
之后,项目中直接以远程调试的方式进行即可,
此时即可进行Tomcat的源代码调试,如果在一启动的时候就想跟踪流程,可以先在Bootstrap中增加断点,开始调试吧。