1

当我尝试通过 Eclipse 进行远程调试时遇到问题。

这些是我使用的论点:

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

我还尝试使用以下方法将地址设置为 0.0.0.0:4044:

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4044

我尝试了各种设置,将挂起设置为“y”使应用程序等待调试连接,一旦连接,应用程序就会继续,但无法建立连接。

当我尝试从 Eclipse 连接时,它会超时。

如果我运行 anetstat -tulpn | grep 4044我得到这个输出:

tcp        0      0 0.0.0.0:4044                0.0.0.0:*                   LISTEN

在连接尝试后,有时它会停止侦听端口。

有任何想法吗?

4

3 回答 3

4

通常在我使用的听力过程中:

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

您必须正确启动该过程
例如对于 tomcat

    JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=4000,server=y,suspend=n"
    catalina.sh jpda start

使用包装器作为 tanuki:

http://wrapper.tanukisoftware.com/doc/english/prop-java-detect-debug-jvm.html

如果你读了

Wrapper 具有几个功能,旨在检测 JVM 何时冻结或变得不稳定。通常这些功能都应该启用。但是,当 JVM 连接到调试器时,JVM 通常会在各种调试操作发生时故意冻结。在这些情况下,Wrapper 通常会认为 JVM 已冻结,并在调试会话中间杀死并重新启动它。Wrapper 通过检查配置的 Java 命令行并在检测到调试器正在使用时忽略某些超时来解决此问题。此属性可以启用或禁用此调试检查。默认值为“TRUE”,它将检测调试并忽略某些超时。示例:(检测调试)wrapper.java.detect_debug_jvm=TRUE

(...)

在你的情况下,我认为你只需要

    wrapper.java.detect_debug_jvm=FALSE

让我知道我是否正确,因为我无法测试它。

于 2013-09-03T14:08:31.500 回答
0

当我需要在 OSGI 服务器上进行调试时,我遇到了类似的问题。

有一个组合的麻烦,解决它们后,我可以很好地调试。

在这个帖子里回答了

顺便说一句,您可以尝试停止防火墙,以防 iptables 您必须这样做:

service iptables stop

您可以尝试修改调试端口并尝试访问它。您可以做的另一个测试是使用另一个工具(如JDebugTool )进行调试,以检查您的 Eclipse 是否存在问题。

如果您使用 Ant,请验证您的 javac 配置是否正确:

<javac srcdir="..." destdir="..." classpathref="..." debug="true" debuglevel="lines,vars,source" />

在 Eclipse 中验证你有这个:

windows > preferences > Java > compiler -> "Classfile generation" -> check "Add line number attributes to generated class file"

希望有所帮助!

于 2014-01-08T16:26:09.950 回答
0

在 ntServiceWrapper.conf 中添加以下内容对我有用

wrapper.java.detect_debug_jvm=TRUE

# Number of seconds to allow between the wrapper pinging the JVM and the response.
wrapper.ping.timeout=0
于 2018-03-29T12:51:30.397 回答