【问题标题】:Remote debugging Tomcat with Eclipse使用 Eclipse 远程调试 Tomcat
【发布时间】:2011-04-19 15:13:49
【问题描述】:

我似乎无法通过 Eclipse 调试 tomcat 应用程序。我已经设置了

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

然后我运行bin/catalina.sh,我看到输出显示它正在侦听port 8000 上的dt_socket。但是,每当我尝试在 Eclipse 中连接到端口 8000(通过在远程 Java 应用程序菜单中添加一个条目)时,它都会抱怨连接被拒绝。有什么想法吗?

【问题讨论】:

  • 能否请您发布您在 Eclipse 中使用的远程配置。

标签: eclipse tomcat


【解决方案1】:

你能检查一下这是否有效吗?

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

catalina.sh jpda start

【讨论】:

  • 实际上,您的确实修复了它。 Eclipse 成功连接时实际上并没有说任何内容,并且第二次重新连接会导致错误。所以它起作用了,但我只是没有注意到。
  • 适用于 Windows 操作系统的用户:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=ncatalina.bat jpda start
  • suspend=n 选项有什么作用?
  • @Trismegistos。 suspend 指定 jvm 是应该等待调试器还是继续。见this doc
  • 其实catalina.sh jpda start 应该够用了。 catalina.sh 有几个 JPDA_* 参数,例如可用于更改端口,请参阅文件以获取文档。
【解决方案2】:

我花了一些时间来获取正确的信息。

所以这里是一步一步的详细信息。

环境:Windows 7

TomCat 版本:7.0

IDE:Eclipse

为了在 tomcat 中启用远程调试而添加的配置是

-Xdebug
-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n

我不推荐在非 windows 环境下进行上述配置。 要添加上述配置,请双击将在服务器视图中可用的 tomcat 服务器。找到下面的屏幕截图。

现在将上面的运行环境配置添加到tomcat中。对于这个检查下面的截图。

现在进入编辑启动配置属性中的参数选项卡,如下面的屏幕截图所示。

GoTo VM arguments 部分添加这些行。

-Xdebug

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

现在需要调试 Eclipse 工具栏上的可用按钮。

在 Debug 配置中找到“Remote Java Application”并双击它。

在名称字段中输入您喜欢的任何名称。

使用浏览按钮从项目字段中选择要执行远程调试的项目。

主机名只不过是主机地址。这里我在本地工作,所以它是“localhost”。

最后一个端口列的值应该是 8000。除了名称和项目文本字段之外,其他两列主机和端口将由 eclipse 本身填充,如果没有使您具有与提到的相同的值。检查屏幕截图以获取信息。

现在右键单击服务器控制台中的 TomcatServer,从上下文菜单中选择添加和删除。从此对话框中,您可以将项目添加到服务器。

现在运行 Tomcat 服务器。

现在从调试工具运行 TomCatDebugConfiguration。

最后打开内部或外部浏览器并运行您的项目。如果执行控制到达断点,则 Eclipse 将提示调试透视图。

【讨论】:

  • 无法连接到远程虚拟机,连接超时,知道吗?
【解决方案3】:

在找到catalina.bat.sh 的tomcat bin 目录中(又名{CATALINA_BASE}/bin),编辑(如果不存在则创建):

setenv.bat/.sh

添加以下行:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

这就是您需要做的所有事情,您无需编辑catalina.bat(或.sh)文件。

查看catalina.batcatalina.sh中的cmets。

您可能需要针对您的特定环境/情况调整语法。例如,如果您已经定义了 CATALINA_OPTS,您可能会执行以下操作(在 windows 环境中):

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n

从 Eclipse 调试:

运行->调试配置...->远程 Java 应用程序->新建

并指定名称、您正在调试的项目以及上面指定的 tomcat 主机和调试端口。

【讨论】:

  • 这是有效的,您需要在 tomcat/bin 目录中的 setenv.sh 中设置此 CATALINA_OPTS。谢谢。
  • 在我的 setenv.bat 中是 JAVA_OPTS (tomcat 7)
  • 您好 Philip,添加了一些可能会有所帮助的注释:您使用的是哪个 os、tomcat 和 eclipse 版本?
  • setenv.batbin目录下放一行set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n,用startup.bat启动tomcat
【解决方案4】:

catalina.bat文件中请修改以下内容。

  • 第一步:CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

  • 第二步:JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

  • 第 3 步:从命令提示符运行 Tomcat,如下所示:catalina.sh jpda start

  • 第四步:然后在eclipse中创建调试配置

    1. 为配置提供任何名称。
    2. project name
    3. 将连接类型指定为Standard(Socket Attach)
    4. 主机为localhost
    5. 端口为8000(或任何端口号,但在其他地方也应该相同)。

【讨论】:

  • 我在 catalina.bat 的以下部分找到了 CATALINA_OPTS, :doStop shift set ACTION=stop set CATALINA_OPTS= goto execCmd :doConfigTest shift set ACTION=configtest set CATALINA_OPTS= goto execCmd 在哪里编辑它?你能上传你的 catalina.bat 的内容吗?
  • 好像你在写同样的东西两次。我跳过了您的第 1 步 - 它有效。您能确认不需要更改 CATALINA_OPTS 吗?
  • 对于 CATALINA_OPTS 和 JPDA_OPTS 之间的差异,请参阅:stackoverflow.com/questions/11222365/…
  • 这在 Tomcat 8 中不起作用。为了让它在 Tomcat 8 中起作用,您必须省略第 1 步。
  • @RAJ。它完全可以在 Tomcat 6 中运行。非常感谢。
【解决方案5】:

上面的许多答案都是正确的,但请记住,默认情况下,调试器会在 localhost 上进行侦听,这意味着只有在运行调试客户端(例如,IDE ) 在同一台机器上。

如果您正在调试远程服务器,您将需要在该服务器上指定正确的 IP 地址以进行侦听,例如

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=10.1.1.33:8000,server=y,suspend=n"

catalina.sh jpda 开始

注意现在地址是10.1.1.33:8000

当然,你也可以通过运行检查实际使用的是哪个IP

netstat -an

此命令在 Windows 和 Linux 上均有效 - 您只需使用 find (Windows) 或 grep (Linux) 过滤掉端口。

【讨论】:

  • 我认为您的意思是实际使用的是哪个 PORT,而不是哪个 IP
  • 不,我的意思是“IP 地址”。如果您进行远程调试(从另一台机器),您需要能够指定一个不同于 localhost 或 127.0.0.1 的 IP 地址。当然你也总是需要端口号。
【解决方案6】:

只需运行./catalina.sh jpda start(分叉)或./catalina.sh jpda run(不分叉,帮助中未提及)。这里提到的所有选项都默认为合理的值。

【讨论】:

    【解决方案7】:

    下面分享一下tomcat7用eclipse(Windows)开启远程调试模式的简单方法。

    第一步:打开 bin/startup.bat 文件
    第 2 步:添加以下行以使用 JDPA 选项进行调试(它应该是文件的起始行)

        set JPDA_ADDRESS=8000  
        set JPDA_TRANSPORT=dt_socket  
    

    第3步:在同一个文件中..转到文件末尾修改这一行 -

        call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
        instead of line  
        call "%EXECUTABLE%" start %CMD_LINE_ARGS%  
    

    第 4 步:然后运行 ​​bin>startup.bat (所以现在您的 tomcat 服务器以远程模式运行,端口为 8000)。

    第 5 步:之后,让 Eclipse IDE 与远程客户端连接您的源项目。

    第六步:在 Eclipse IDE 中进入“调试配置”

    第七步:点击“远程java应用程序”,然后点击“新建”

    第 8 步。在“连接”选项卡中设置参数值

       project= your source project  
       connection Type: standard (socket attached)   
       host: localhost  
       port:8000  
    

    step9:点击应用并调试。

    所以最后你的 Eclipse 远程客户端连接到正在运行的 tomcat 服务器(调试模式)。

    希望这种方法可能对您有所帮助。

    问候..

    【讨论】:

      【解决方案8】:

      修改catalina.bat添加

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

      CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
      

      可选:在运行startup.bat时添加以下行以默认运行调试模式

      call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
      

      Eclipse或STS选择调试配置右键->新建

      connection type -> Standard socket Attach
      Port -> 8000 (as given in the CATALINA_OPTS)
      Host -> localhost or IP address
      

      【讨论】:

      • 此信息适用于 WINDOWS,但我恰好在 Windows 上,因此对我有所帮助。谢谢!
      【解决方案9】:

      如果以上所有方法仍然不起作用,您可以随时添加到脚本中

          set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
      

      【讨论】:

        【解决方案10】:

        在 tomcat 7 中,catalina.sh 有这样的代码:

        if [ "$1" = "jpda" ] ; then
          if [ -z "$JPDA_TRANSPORT" ]; then
            JPDA_TRANSPORT="dt_socket"
          fi
          if [ -z "$JPDA_ADDRESS" ]; then
            JPDA_ADDRESS="8000"
          fi
          if [ -z "$JPDA_SUSPEND" ]; then
            JPDA_SUSPEND="n"
          fi
          if [ -z "$JPDA_OPTS" ]; then
            JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
          fi
          CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
          shift
        fi
        

        Ii 表示您可以设置 JPDA:

        export JPDA_TRANSPORT=dt_socket
        export JPDA_ADDRESS=8000
        export JPDA_SUSPEND=n
        

        或与:

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

        最后使用:

        catalina.sh jpda start

        问候

        【讨论】:

        • Tomcat 8:可以在 setenv.sh 中设置 JPDA_ 变量,而无需“导出”它们。无论如何,启动调用的第一个参数必须是“jpda”。如果你将tomcat作为服务启动,最好修改${CATALINA_HOME}/bin/startup.sh脚本,在'start'之前的最后一行添加'jpda'参数:'´exec "$PRGDIR"/"$EXECUTABLE " jpda start "$@"´´.
        【解决方案11】:

        对于 apache-tomcat-8.5.28 版本只需这样做,

        catalina.bat jpda start
        

        作为已经在 catalina.bat 中为我们配置的默认设置

        如果不是 "%JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%

        所以不需要任何其他配置。而当你执行命令 catalina.bat jpda start 时,你可以看到调试端口 8000 被打开。

        【讨论】:

          【解决方案12】:

          我在 Docker 容器中运行 Tomcat 时遇到了这个问题。要解决此问题,请确保在 docker run 命令中添加“-p 8000:8000”参数,以将此端口公开给本地计算机。您当然也需要容器中 ${CATALINA_HOME}/bin/ 中的 setenv.sh 文件。

          【讨论】:

            【解决方案13】:

            使用 CATALINA_OPTS 和 JPDA_OPTS 修改 startup.bat 对我不起作用,但将它们添加到 catalina.bat 中

            1. 修改 catalina.bat

            CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

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

            1. 修改 startup.bat 以包含 jpda

            将调用“%EXECUTABLE%”开始 %CMD_LINE_ARGS% 更改为

            call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

            然后在 Eclipse 的调试配置中配置远程 java 应用程序。

            【讨论】:

              【解决方案14】:

              首先,如果你用文本编辑器打开 catalina.bat,你会看到: “不要在这个脚本中设置变量.....”所以不要在那个脚本中改变它,而是你可以做以下步骤:

              1. 它建议您创建一个名为“setenv.bat”的新 bat 文件。
              2. 然后在该 bat 文件中设置 2 个变量,例如:

                设置 CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

                设置 JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

              3. 最后在 cmd 中运行:“catalina.bat jpda start”

              4. 在IDE中,创建远程调试配置,设置主机为相关服务器ip,端口为8000。

              【讨论】:

                【解决方案15】:

                查看我在使用 Java 8 和 Tomcat 9 时遇到的问题的答案:Java remote debugging (JPDA) not working for me in Tomcat 9

                这类似于@DAB 的警告,他的解决方案可能更安全。

                【讨论】:

                  【解决方案16】:

                  对于 apache-tomcat-8.5.28

                  像下面这样修改JDPA_OPTS,然后像catalina.bat jpda start一样运行

                  JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
                  JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=8000,server=y,suspend=$JPDA_SUSPEND"
                  

                  【讨论】:

                    猜你喜欢
                    • 2013-02-13
                    • 2011-08-14
                    • 2014-01-09
                    • 2014-01-14
                    • 2011-12-23
                    • 2020-03-10
                    • 2012-10-17
                    • 1970-01-01
                    • 2015-09-02
                    相关资源
                    最近更新 更多