使用Eclipse远程调试Tomcat


95

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

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

然后我跑bin/catalina.sh,我在那里看到输出说它的监听dt_socketport 8000。但是每当我尝试连接到8000Eclipse中的端口时(通过在远程Java应用程序菜单中添加一个条目),它都会抱怨连接被拒绝。有任何想法吗?


能否请您发布您在eclipse中使用的远程配置。
肖恩(Sean)2010年

Answers:


133

您能检查一下是否可行吗?

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

catalina.sh jpda start

4
实际上,您的确解决了该问题。Eclipse成功连接时实际上并没有说什么,而第二次重新连接会强制执行该错误。这样就可以了,但是我没有注意到。
胜利者

18
这适用于Windows OS中的用户:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam,2013年

1
suspend = n选项有什么作用?
Trismegistos

2
@Trismegistos。suspend指定JVM应该等待调试器还是继续。请参阅此文档
拉古拉姆

9
其实catalina.sh jpda start应该足够了。catalina.sh具有几个JPDA_*参数,可用于例如更改端口,请参阅该文件以获取文档。
zpon 2014年

53

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

因此,这里是逐步的详细信息。

环境:Windows 7

TomCat版本:7.0

IDE:Eclipse

要添加的启用tomcat远程调试的配置是

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

我不建议在非Windows环境下进行上述配置。要添加以上配置,请双击tomcat服务器,该服务器将在服务器视图中可用。找到以下屏幕截图。 在此处输入图片说明

现在,将以上运行时环境配置添加到tomcat。对于此检查下面的截图。

在此处输入图片说明

现在进入“编辑启动配置属性”中的“ Arugments”选项卡,如下面的屏幕快照所示。

在此处输入图片说明

GoTo VM arguments部分添加这些行。

-Xdebug

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

在此处输入图片说明

现在可以在Eclipse工具栏上找到调试按钮。

在此处输入图片说明

在“调试配置”中,找到“远程Java应用程序”,然后双击它。在此处输入图片说明

在名称字段中输入您想要的任何名称。

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

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

最后,“端口”列的值应为8000。除了“名称”和“项目”文本字段外,如果没有使您具有与上述相同的值,则主机和端口将由Eclipse自身填充。检查屏幕快照以获取信息。在此处输入图片说明

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

现在运行Tomcat服务器。

在此处输入图片说明

现在,从调试工具运行TomCatDebugConfiguration。

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


47

在找到catalina.bat或的tomcat bin目录.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

您可能必须针对您的特定环境/情况调整语法。例如,如果您已经定义了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。谢谢。
阿米特·库玛

1
在我的setenv.bat中,它是JAVA_OPTS(tomcat 7)
vikingsteve,2015年

您好菲利普(Philip),您添加了一些注释,如果没有帮助,可能会有所帮助:您使用的是哪个os,tomcat和eclipse版本?
卡尔

setenv.batbin目录中放线一样set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n,使用startup.bat启动Tomcat
Paramvir辛格卡尔瓦尔

33

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. project name
    3. 将连接类型指定为 Standard(Socket Attach)
    4. 主机为 localhost
    5. port as 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 NG

好像您在写同一件事两次。我跳过了您的第1步-它起作用了。您可以确认无需更改CATALINA_OPTS吗?
亨利·阿洛尼

有关两者之间的差异,请参见CATALINA_OPTS和JPDA_OPTS,请参见:stackoverflow.com/questions/11222365/…–
Mike R

1
这不会在Tomcat中8工作为使其工作在Tomcat中8,你就得离开了第1步
戴夫

@RAJ。它完全在Tomcat 6中工作。非常感谢。
T8Z 2015年

7

上面的许多答案都是正确的,但请记住,默认情况下,调试器仅在localhost上侦听。如果要调试远程服务器,则需要指定要侦听的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
阿卜杜拉

1
不,我的意思是“ IP地址”。如果(从另一台计算机上)进行远程调试,则需要能够指定一个不同于localhost或127.0.0.1的IP地址。当然,您永远也需要端口号。
民建联

5

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


5

让我分享使用eclipse(Windows)在tomcat7中启用远程调试模式的简单方法。

步骤1:打开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与远程客户端连接源项目。

步骤6:在Eclipse IDE中转到“调试配置”

step7:单击“远程Java应用程序”,然后单击“新建”

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

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

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

因此,最终您的eclipse远程客户端与正在运行的tomcat服务器连接(调试模式)。

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

问候..


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上,因此对我有所帮助。谢谢!

2

如果以上所有方法仍然无效,您可以随时将其添加到脚本中

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

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

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脚本,在“开始”之前的最后一行中添加“ jpda”参数:´exec“ $ PRGDIR” /“ $ EXECUTABLE “ jpda开始” $ @“´´。
Heri

1

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


0

用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%

呼叫“%EXECUTABLE%” jpda开始%CMD_LINE_ARGS%

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


0

首先,如果使用文本编辑器打开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。


0

对于apache-tomcat-8.5.28版本,只需执行此操作,

catalina.bat jpda start

由于已经在catalina.bat中为我们配置了默认设置,

如果不是“%JPDA_OPTS%” ==“”则将getJpdaOpts设置为JPDA_OPTS = -agentlib:jdwp = transport =%JPDA_TRANSPORT%,address =%JPDA_ADDRESS%,server = y,suspend =%JPDA_SUSPEND%

因此,不需要任何其他配置。并且当您执行命令catalina.bat jpda start时,您可以看到调试端口8000已打开。



-2

对于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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.