【问题标题】:JBoss EAP 6 configure single server for remote debugging in domain modeJBoss EAP 6 配置单服务器以在域模式下进行远程调试
【发布时间】:2013-11-22 05:03:24
【问题描述】:

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

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

我在 $JBOSS_HOME/bin/domain.conf 中启用了HOST_CONTROLLER_JAVA_OPTSPROCESS_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。如果我列出系统中运行的进程,我可以看到一个用于域控制器,一个用于主机控制器,一个用于服务器(服务器1)。域和主机控制器在其启动属性中指定了调试选项,但 server1 缺少它们。

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

【问题讨论】:

    标签: jboss remote-debugging


    【解决方案1】:

    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"
    

    另一方面,您可以检查将 suspend 标志设置为 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

    希望能帮到你

    【讨论】:

      【解决方案2】:

      嘿,我没有解决方案,但是我能够为服务器一设置端口以及主机和进程控制器。 我是怎么做到的:我在 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 中的断点。

      【讨论】:

      • 只是想说我确实注意到了您的意见,但我现在没有机会尝试。我会尽快报告我的发现。
      【解决方案3】:

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

      &lt;servers&gt; -&gt; &lt;server&gt; -&gt; &lt;jvm&gt;下添加如下配置

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

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多