使用 IntelliJ 远程调试 Tomcat 7

Posted

技术标签:

【中文标题】使用 IntelliJ 远程调试 Tomcat 7【英文标题】:Remote Debug Tomcat 7 With IntelliJ 【发布时间】:2017-02-03 19:55:07 【问题描述】:

我有一个在 10.0.1.62:8080/xxx 上运行的 Web 应用程序。我想通过 IntelliJ IDEA 远程调试。我已设置 JAVA_OPTS = -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

在 10.0.1.62 机器(Ubuntu 上的 Tomcat7)上,当我点击远程调试按钮时,IDE 会给出一条信息消息:

连接到目标VM,地址:'10.0.1.62:8000',传输:'socket'

比我打的10.0.1.62:8080/xxx。 尽管我收到此成功消息,但没有命中断点。我错过了什么?

【问题讨论】:

【参考方案1】:

首先,通过参考以下问题和答案仔细检查您的设置:Remote Debugging in IntelliJ Tomcat

从您的问题来看,您似乎已经遵循了这些步骤。过去还有一些其他配置问题导致我在远程 tomcat 调试方面遇到问题,我将分享并希望对您有所帮助。

    确保您在 IntelliJ 上启动了正确的远程调试过程。 如果您的主机上运行着多个 Tomcat 服务器,请确保您连接到正确的 Tomcat 实例。调试端口 8000 可能已在使用中。我正在使用任意端口 15019 或其他尚未使用的端口号。确保使用的端口在 Tomcat 和 IntelliJ 之间匹配。

    根据您在 Tomcat 上设置远程调试的方式,它可能无法正常关闭而让旧实例继续运行。在 catalina.sh 顶部添加调试钩子会导致 shutdown.sh 脚本失败,因为您的调试端口已经绑定到 Tomcat 服务器。而是将其放在 start if 语句中:

    elif [ "$1" = "start" ] ; then JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=15019,suspend=n,server=y"

修复此问题后,您可以使用 ./shutdown.sh 成功关闭 Tomcat,并且仍然可以使用 ./startup.sh 开始调试

    确保您在 Tomcat 上干净部署了您的应用程序。您的清理过程可能需要变化,但总体思路如下:

    Shutdown Tomcat, then verify it is no longer running. Remove the deployed war file and corresponding exploded version from your tomcat webapps directory. Remove the contents of the work and temp directories. Deploy and verify your recently build war file. Start Tomcat.

创建一个脚本来执行此操作将节省时间。

    如果所有其他方法都失败,请添加调试日志以仔细检查首先调用断点的代码。

我敢肯定还有其他 20 件事情可能出错。随意添加想法。

【讨论】:

以上是关于使用 IntelliJ 远程调试 Tomcat 7的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA + tomcat 远程调试

[JavaWeb]_[初级]_[使用IntelliJ IDEA进行远程Tomcat调试]

[JavaWeb]_[初级]_[使用IntelliJ IDEA进行远程Tomcat调试]

在IntelliJ IDEA中远程断点调试tomcat

Intellij IDEA远程调试tomcat

IntelliJ IDEA 2018.2.2远程调试Tomcat的配置方法