Ksh*_*rma 8 java eclipse debugging tomcat
我想学习tomcat操作的内部并理解流程.
为此,我创建了一个servlet -
public class TestServlet extends HttpServlet {
//Breakpoint set on constructor
public TestServlet() {
}
}
Run Code Online (Sandbox Code Playgroud)
我在源查找目录中包含了tomcat源代码,并以调试模式启动了服务器.以下是调试器在断点处停止时的堆栈跟踪 -
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,tomcat启动了一个新的守护程序线程来处理初始化TestServlet.如果我从这个位置退出,它将回溯到最后运行然后停止.但是我想了解主服务器逻辑.我该怎么办才能org.apache.catalina.startup.Bootstrap上课? (或在主启动线程上运行的其他类)
您可以将Tomcat作为远程Java应用程序进行调试.
以下是步骤:
创建CATALINA_BASE/bin/setenv.bat(或.sh)文件并将以下行放入该文件中.
set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y
使用命令行中的catalina.bat(或.sh)以调试模式启动Tomcat.
catalina.bat jpda start
从Eclipse,在Remote Java Application下设置Debug Configuration并连接到Tomcat进程.(运行 - >调试配置 - >远程Java应用程序.)
截图:

| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |