3

我有域控制器、一个主机控制器和一台服务器在同一台机器上运行。

我正在使用 IDEA 连接到远程服务器进行调试,但即使它正在运行代码(我已经通过系统输出验证),它也不会在断点处停止。

我已在 $JBOSS_HOME/bin/domain.conf 中启用HOST_CONTROLLER_JAVA_OPTS并进行远程调试:PROCESS_CONTROLLER_JAVA_OPTS

# Sample JPDA settings for remote socket debuging.
PROCESS_CONTROLLER_JAVA_OPTS="$PROCESS_CONTROLLER_JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8788,server=y,suspend=n"
HOST_CONTROLLER_JAVA_OPTS="$HOST_CONTROLLER_JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"

当我启动 JBoss 服务器时,我可以从 netstat 看到它正在正确侦听端口 8787 和 8788。如果我列出系统中运行的进程,我可以看到一个用于域控制器,一个用于主机控制器,一个用于服务器(server1)。域和主机控制器在其启动属性中指定了调试选项,但 server1 缺少它们。

一段时间以来,我一直在查看各种 XML、.conf 和 .sh 文件,但我不知道如何指定 server1 以使用远程调试选项。有没有办法在域模式下远程调试单个服务器?

4

3 回答 3

2

JHollanti 也许您缺少一些编译器标志(如“行、变量、源”)以允许远程调试。

例如,您是否正在使用 Ant,您需要将此行添加到您的 javac:

<!-- Javac lines, vars, source compiler flags -->
<javac srcdir="..." destdir="..." classpathref="..." debug="true" debuglevel="lines,vars,source" />

然后在您的执行脚本中添加:

<!-- debug configurations: modify the port you want-->
<jvmarg value="-Xdebug"/>
<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4060"/>

另一方面,如果您使用 Maven,可以在 中添加相同的标志,如下所示:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.0.2</version>
      <configuration>
        <!-- Necessary in order for the debug levels to be considered-->
        <debug>true</debug>
        <debugLevel>lines,vars,source</debugLevel>
      </configuration>
    </plugin>
  </plugins>
</build>

在使用 Jetty 的情况下,和以前一样......你需要有以下变量:

export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"

另一方面,您可以检查的是在yes中设置挂起标志,它是"suspend=y"。除非您连接调试器,否则这不会启动您的应用程序。

在这里您可以查看有关 jboss 的具体信息:

http://webdev.apl.jhu.edu/~jcs/ejava-javaee/coursedocs/605-784-site/docs/content/html/devenv-jboss-setup.html#enable-jboss-debug

希望有所帮助

于 2013-11-20T15:17:02.427 回答
1

嘿,我没有解决方案,但是我能够为服务器一设置端口以及主机和进程控制器。我是怎么做到的:我在 jboss 管理控制台上的 JVM 参数中添加了“-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n”。步骤: 1) 登录 jboss 的管理控制台 => localhost:9990/console 2) 转到服务器 => 在表中选择服务器 1。3)然后将调试字符串添加到JVM参数文本框中。

重新启动服务器后,您现在会看到服务器正在侦听此端口。但是,当我尝试在调试模式下运行我的 Eclipse 时出现了问题。虽然在服务器上我可以看到连接是通过 netstat 建立的,但是 eclipse 无法与服务器 1 通信并且它超时。需要注意的重要一点是,如果我按照您在 domain.conf 文件中所做的操作并使用这些端口,我可以在调试模式下运行 eclipse;但是,然后控件永远不会到达我在 Eclipse 中的断点。

于 2013-11-16T09:34:16.287 回答
0

jvm-options您可以通过添加启用远程调试$JBOSS_HOME$\domain\configuration\hosts.xml

在下面添加如下配置<servers> -> <server> -> <jvm>

<jvm-options>
   <option value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"/>
</jvm-options>

您的服务器配置hosts.xml应该与此类似

<servers>
    <server name="Server1" group="Group1" auto-start="true">
        <jvm name="Server1_JVM" debug-enabled="false">
            <heap size="2048m" max-size="4096m"/>
            <jvm-options>
                <option value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"/>
            </jvm-options>
        </jvm>
        <socket-bindings socket-binding-group="full-ha-sockets" port-offset="100"/>
    </server>
</servers>

希望这可以帮助!

于 2016-10-28T21:40:44.130 回答