使用Eclipse远程调试Tomcat

100

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

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

然后我运行bin/catalina.sh,在那里我看到输出说它正在监听端口8000dt_socket。 但是每当我尝试在Eclipse中连接到端口8000(通过在远程Java应用程序菜单中添加一个条目),它会抱怨连接被拒绝。 有什么建议吗?


请问您能否发布在Eclipse中使用的远程配置? - Sean
16个回答

147

你能检查一下这个是否可行吗?

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

catalina.sh jpda start

4
实际上,你的确解决了这个问题。当Eclipse成功连接时并不会有任何提示信息,第二次重新连接会强制出现错误。所以它是可以正常工作的,只是我没有注意到而已。 - victor
22
这是针对Windows操作系统的:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start - Lee Chee Kiam
1
suspend=n选项是什么作用? - Trismegistos
2
@Trismegistos。suspend指定JVM是否应等待调试器或继续执行。请参阅此文档 - Raghuram
12
实际上,“catalina.sh jpda start”应该足够了。 catalina.sh有一些“JPDA_*”参数,可以用于例如更改端口,请参阅文件以获取文档。 - zpon
显示剩余4条评论

56

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

下面是详细的步骤信息。

环境:Windows 7

Tomcat版本:7.0

IDE:Eclipse

要添加的配置以启用Tomcat内的远程调试是:

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

我不建议在非Windows环境下使用上述配置。要添加上述配置,请双击服务器视图中可用的Tomcat服务器,找到以下屏幕截图。 enter image description here

现在将上述运行环境配置添加到Tomcat中。请查看以下截图。

enter image description here

现在转到编辑启动配置属性的Arugments选项卡,如下所示。

enter image description here

进入VM arguments部分,添加以下几行。

-Xdebug

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

enter image description here

现在点击Eclipse工具栏上的调试按钮。

enter image description here

在Debug配置中,找到“Remote Java Application”并双击它。enter image description here

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

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

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

最后,端口列的值应为8000。除了名称和项目文本字段外,其他两个列主机和端口将由Eclipse自己填写,如果没有,请确保您有与提到的相同的值。检查屏幕截图以获取信息。enter image description here

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

现在运行Tomcat服务器。

enter image description here

现在从Debug工具运行TomCatDebugConfiguration。

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


连接远程虚拟机失败,连接超时,有什么想法吗? - rinilnath
你连接失败是因为地址输入错误,应该输入 address=*:8000。 - Gon

53
在 tomcat 的 bin 目录中,即找到 catalina.bat.sh 文件的位置(也就是 {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中的注释。

对于您特定的环境/情况,您可能需要调整语法。例如,在Windows环境下,如果已经定义了CATALINA_OPTS,则可以像这样做:

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。谢谢。 - Amit Kumar
1
在我的 setenv.bat 文件中,它是 JAVA_OPTS(Tomcat 7)。 - vikingsteve
你好 Philip,我添加了一些注释,这些可能会有帮助。如果没有,请告诉我你使用的操作系统、Tomcat 和 Eclipse 的版本是什么? - karl
1
bin 目录下的 setenv.bat 文件中加入以下代码行:set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n,使用 startup.bat 启动 Tomcat。 - Paramvir Singh Karwal
Java 11 更新,指定地址=*:8000 的通配符。 - karl

35
请修改 catalina.bat 文件中以下内容。
  • 步骤1:CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

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

  • 步骤3:像下面这样从命令提示符运行Tomcat:catalina.sh jpda start

  • 步骤4:然后在Eclipse中创建调试配置

    1. 为配置提供任何名称。
    2. 提供项目名称
    3. 将连接类型设置为标准(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文件内容? - Gopakumar N G
似乎你写了两次相同的东西。我跳过了你的第一步 - 然后它就起作用了。你能确认不需要改变CATALINA_OPTS吗? - Henry Aloni
有关CATALINA_OPTS和JPDA_OPTS的区别,请参见:https://dev59.com/uGgu5IYBdhLWcg3wln8O - Mike R
1
这个在Tomcat 8中无法工作。为了让它在Tomcat 8中工作,你必须略过第一步。 - Dave
@RAJ。它在Tomcat 6中完全可用。非常感谢您。 - T8Z

9
以上回答中的许多都是正确的,但请记住,调试器默认只会在本地主机上侦听,这意味着只有在同一台机器上运行调试客户端(例如IDE)时才能进行调试。
如果您正在调试远程服务器,则需要指定该服务器上要侦听的正确IP地址,例如:

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

catalina.sh jpda start

请注意,现在的地址为10.1.1.33:8000
当然,您也可以通过运行以下命令来检查实际使用的IP地址:

netstat -an

此命令适用于Windows和Linux - 您只需要使用find(Windows)或grep(Linux)筛选出端口即可。

我认为你的意思是实际使用的端口,而不是哪个IP - Abdollah
2
不,我的意思是“IP地址”。如果您进行远程调试(从另一台机器),您需要能够指定一个与localhost或127.0.0.1不同的IP地址。当然,您始终还需要端口号。 - DAB

5

让我分享一种简单的方法,如何在Windows中使用eclipse启用tomcat7的远程调试模式。

步骤1:打开bin/startup.bat文件
步骤2:在JDPA选项下添加以下行(应该是文件的起始行)以进行调试。

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

步骤三:在同一个文件中..到文件末尾修改此行 -
    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
    instead of line  
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%  

第四步:运行bin>startup.bat(这样你的Tomcat服务器就以远程模式运行,并使用端口8000)。

第五步:接下来让我们通过Eclipse IDE与远程客户端连接源项目。

第六步:在Eclipse IDE中转到“调试配置”。

第七步:单击“远程Java应用程序”,然后单击“新建”。

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

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

步骤9:点击应用并调试。

这样,您的Eclipse远程客户端就与正在运行的Tomcat服务器(调试模式)连接成功了。

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

祝好。


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

4

修改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,所以它对我很有帮助。谢谢! - Ring

2
在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

这意味着您可以通过以下方式设置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:JPDA_变量可以在setenv.sh中设置,无需“export”它们。无论如何,启动调用的第一个参数必须是'jpda'。如果您将tomcat作为服务启动,则最好修改${CATALINA_HOME}/bin/startup.sh脚本,在'start'之前的最后一行添加'jpda'参数:´´exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"´´。 - Heri

2
如果以上方法仍然无效,您可以随时添加到脚本中。
    set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接