怎样调试Tomcat源码

 

如何调试Tomcat源码?你还了解其它的方式吗?...



我前面大多数文章都是以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为例

  1. 首先创建一个工程Java工程。
  2. 导入源码文件,此处可以有如下方式:
  3. [list=1]
  4. 全部拷贝进来
  5. 以link source方式引入。(右击项目,在build Path中选择Link source)
  6. 将已安装的Tomcat的lib下的jar文件添加到项目依赖中,再添加其它需要的jar文件,例如ant.jar
[*] 设置主类



[/*][*]设置参数


[/*][*]点击Debug,程序跑起来了,开始调试吧。

[/*][/list]以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中增加断点,开始调试吧。

扫描二维码,轻松关注! QQ群:96437267


    关注 Tomcat那些事儿


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册