在 Tomcat 和 Intellij 上进行远程调试

Remote debugging on Tomcat and Intellij

我想了解远程调试的具体工作原理。我需要将我的应用程序部署到 tomcat 上才能运行吗?更具体地说,假设我的机器上有源代码,IntelliJ 上的客户端调试器,将代码指令传输到远程机器上的服务器调试器,或者代码已经部署在该机器上。

从我在 JDA 上看到的所有示例来看,必须在远程计算机上使用所需选项启动应用程序,以便客户端调试器(前端)可以连接到该计算机上的调试器后端。

但我不清楚如何让它与像 tomact 这样的容器一起工作。从我读到的例子来看,这种情况下的应用程序似乎只是 tomcat 和通过线路传输的源代码中的指令。事实上,我没有看到任何部署应用程序的步骤。

谁能解释一下。

Tomcat 远程调试就像按以下方式启动 Tomcat 一样简单:

/some/path$ catalina.sh jpda start

这将启动 Tomcat,并在默认端口 8000 上启用远程调试。许多其他内容,包括如何更改此端口,在 FAQ.

中进行了说明

当您调试部署在 tomcat 容器内的应用程序时,您 必须 远程部署您的应用程序。远程调试调试 remote 应用程序(驻留在 tomcat 容器内)。你在intellij中看到的源代码在debug时并没有传输到服务器。

您可以尝试一个小实验:在您的源代码中添加一些行并在其上放置断点,然后启动远程调试会话而不 重新部署。因为您将在源代码和已部署代码之间不同步,您会看到新代码行上的断点被 intellij 标记为红色 'x' - 这是因为调试器无法找到这些行(通过行号)在服务器上。

调试实际上可以工作并在断点处停止,即使您在 intellij 中的源代码与远程服务器上的代码不同,只要断点在 classes 中并且在两者上具有相同的名称.然而,实际上 运行 的代码是服务器上的代码。

附带说明一下,您可以在调试会话期间更改 intellij 中的代码,并使更改立即在服务器中生效(直到调试会话结束)。为此,在调试会话等待断点时编译更改的 class(在 intllij 中为 ctrl+F9)。这会调用 HotSwap mecahnism.