JBoss EAP 6在域模式下配置单个服务器进行远程调试

时间:2013-11-10 10:31:30

标签: jboss remote-debugging

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

我正在使用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来使用远程调试选项。有没有办法在域模式下远程调试单个服务器?

3 个答案:

答案 0 :(得分:2)

JHollanti可能你缺少一些编译器标志(比如“line,vars,source”)以允许远程调试。

例如,您是否正在使用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 = y”。除非您连接调试器,否则无法启动您的应用。

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

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

希望能提供帮助

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以在let info = item["volumeInfo"] as? [String:Any] { print(info) let title = info["title"] as! String print(title) }

中添加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

希望这有帮助!