我想了解远程调试是如何工作的。我是否需要在tomcat上部署我的应用程序才能使其正常工作?更具体地说,假设我的机器上有源代码,IntelliJ上的客户端调试器,将代码指令传送到远程机器上的服务器调试器,或者代码已经部署在该机器上。
从我在JDA上看到的所有示例中,必须在远程计算机上使用所需选项启动应用程序,以便客户端调试程序(前端)可以连接到该计算机上的调试器后端。
但我不清楚如何使它像容器一样使用tomact。从我读过的例子来看,在这种情况下,应用程序似乎只是tomcat和来自源代码的指令。实际上,我没有看到任何部署应用程序的步骤。
请有人解释一下。
答案 0 :(得分:1)
Tomcat远程调试就像以下方式启动Tomcat一样简单:
/some/path$ catalina.sh jpda start
这将启动Tomcat,在默认端口8000上启用远程调试。许多其他内容,包括如何更改此端口,在FAQ中进行了解释。
答案 1 :(得分:1)
调试部署在tomcat容器中的应用程序时,必须远程部署应用程序。远程调试调试远程应用程序(位于tomcat容器内)。您在intellij中看到的源代码在调试期间不会传输到服务器。
您可以尝试一些小实验:在源代码中添加一些行并在其上添加断点,然后启动远程调试会话,无需重新部署。由于您在源代码和已部署代码之间不同步,因此您会看到新代码行上的断点标记为红色' x' by intellij - 这是因为调试器无法在服务器上找到这些行(按行号)。
调试实际上可以在断点上工作并停止,即使断言中的源代码与远程服务器上的代码不同,只要断点位于两者上具有相同名称的类中。但是,实际运行的代码是服务器上的代码。
作为旁注,您可以在调试会话期间更改intellij中的代码,并使更改立即在服务器中生效(直到调试会话结束)。为此,在调试会话等待断点时编译已更改的类(intllij中的ctrl + F9)。这会调用HotSwap mecahnism。