gpt4 book ai didi

java - 如何单步进入tomcat源码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:21 30 4
gpt4 key购买 nike

想学习tomcat运行的内部原理,了解流程。

为此我创建了一个 servlet -

public class TestServlet extends HttpServlet {
//Breakpoint set on constructor
public TestServlet() {
}
}

我将 tomcat 源代码包含在源查找目录中,并以 Debug模式启动服务器。以下是调试器在我的断点处停止时的堆栈跟踪 -

Daemon Thread [localhost-startStop-1] (Suspended (entry into method <init> in TestServlet)) 
owns: StandardWrapper (id=39)
owns: StandardContext (id=40)
TestServlet.<init>() line: 12
NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: 39
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27
Constructor<T>.newInstance(Object...) line: 513
Class<T>.newInstance0() line: 355
Class<T>.newInstance() line: 308
DefaultInstanceManager.newInstance(String) line: 138
StandardWrapper.loadServlet() line: 1144
StandardWrapper.load() line: 1088
StandardContext.loadOnStartup(Container[]) line: 5123
StandardContext.startInternal() line: 5407
StandardContext(LifecycleBase).start() line: 150
ContainerBase$StartChild.call() line: 1559
ContainerBase$StartChild.call() line: 1549
FutureTask$Sync.innerRun() line: 303
FutureTask<V>.run() line: 138
ThreadPoolExecutor$Worker.runTask(Runnable) line: 886
ThreadPoolExecutor$Worker.run() line: 908
Thread.run() line: 662

如您所见,tomcat 启动了一个新的守护线程来处理 TestServlet 的初始化。如果我离开这个位置,它会回溯到运行然后停止。但是我想了解主要的服务器逻辑。 我应该怎么做才能进入 org.apache.catalina.startup.Bootstrap 类?(或在主启动线程上运行的其他一些类)

最佳答案

您可以将 Tomcat 作为远程 Java 应用程序进行调试。

步骤如下:

  1. 创建一个 Java 项目并将 Tomcat 源文件复制到项目的源文件夹中。 (您可以忽略编译错误。)
  2. 打开 Bootstrap.java 并在 main 方法处设置断点。
  3. 创建一个 CATALINA_BASE/bin/setenv.bat(或 .sh)文件并将以下行放入该文件。

    set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y

  4. 从命令行使用 catalina.bat(或 .sh)以 Debug模式启动 Tomcat。

    catalina.bat jpda 启动

  5. 在 Eclipse 中,在远程 Java 应用程序下设置调试配置并连接到 Tomcat 进程。 (运行 -> 调试配置 -> 远程 Java 应用程序。)

截图: Tomcat debugging using JPDA_OPTS

关于java - 如何单步进入tomcat源码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932287/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com