无法在IntelliJ中打开调试器端口

60

无法在IntelliJ中打开调试器端口。 端口号9009与应用程序配置文件中设置的端口号相匹配。

<java-config debug-options="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9009" system-classpath="" native-library-path-prefix="D:\Project\lib\windows\64bit" classpath-suffix="">
    <jvm-options>-XX:MaxPermSize=192m</jvm-options>
    <jvm-options>-client</jvm-options>
    <jvm-options>-XX:+UnlockDiagnosticVMOptions</jvm-options>
    <jvm-options>-XX:+LogVMOutput</jvm-options>
    <jvm-options>-XX:LogFile=${com.sun.aas.instanceRoot}/logs/jvm.log</jvm-options>
    <jvm-options>-Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed</jvm-options>
    <jvm-options>-Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy</jvm-options>
    <jvm-options>-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf</jvm-options>
    <jvm-options>-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as</jvm-options>
    <jvm-options>-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks</jvm-options>
    <jvm-options>-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks</jvm-options>
    <jvm-options>-Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext</jvm-options>
    <jvm-options>-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver</jvm-options>
    <jvm-options>-DANTLR_USE_DIRECT_CLASS_LOADING=true</jvm-options>
    <jvm-options>-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory</jvm-options>
    <jvm-options>-Dosgi.shell.telnet.port=4766</jvm-options>
    <jvm-options>-Dosgi.shell.telnet.maxconn=1</jvm-options>
    <jvm-options>-Dosgi.shell.telnet.ip=127.0.0.1</jvm-options>
    <jvm-options>-Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/</jvm-options>
    <jvm-options>-Dfelix.fileinstall.poll=5000</jvm-options>
    <jvm-options>-Dfelix.fileinstall.debug=1</jvm-options>
    <jvm-options>-Dfelix.fileinstall.bundles.new.start=true</jvm-options>
    <jvm-options>-Dorg.glassfish.web.rfc2109_cookie_names_enforced=false</jvm-options>
    <jvm-options>-XX:NewRatio=2</jvm-options>
    <jvm-options>-Xmx2048m</jvm-options>
  </java-config>

在IntelliJ中的配置:

输入图像描述

当我尝试启用此应用程序的远程调试时,出现以下错误: 输入图像描述


端口似乎没有打开。你的应用程序日志文件里写了什么?一般来说,它会写类似于这样的内容: “正在侦听地址为9009的dt_socket传输”。 - maba
1
@maba:端口是打开的,因为我运行了telnet 192.168.2.100 9009。但是netstat没有工作,这意味着glassfish配置存在问题。所以我在我的答案中添加了以下配置参数到glassfish的java-config中,然后它就可以工作了。感谢您的贡献。 - MindBrain
请确保您使用正确的“运行配置”。 - techkuz
22个回答

48

如果您的端口已被另一个程序使用,则可能需要更改调试器端口。操作如下:

  • 运行
  • 编辑配置
  • 启动/连接选项卡
  • 调试
  • 在这里更改端口

或者,在其他版本中:

  • 运行
  • 编辑配置
  • 左侧列表中的远程 > 远程调试
  • 配置选项卡,设置部分
  • 端口:在此处更改端口

如果您没有使用默认配置,而是制作了自定义远程配置,那该怎么办? - Ann Kilzer
你的意思是在 localhost:8000 上使用远程调试器吗?如果是的话,你需要在应用程序的 JVM(Run)中指定调试选项,但问题仍然存在,你需要一个空闲端口。 - Pleymor
@Pleymor,我在我的Mac OSX上的Android Studio 2.2.2中从“运行>编辑配置”中没有看到任何“启动/连接”选项卡。这个有变化吗? - MrColes
@MrColes 我猜它只适用于 IntelliJ IDEA 而不是 Android Studio - Pleymor
我使用Eclipse工作。在将Idea设置为5005后,我遇到了问题,但由于某种原因,我甚至无法再次使用Idea运行程序。将配置更改为5006,然后它就可以正常工作了。 - arviman

9
将以下参数debug-enabled="true"添加到glassfish配置文件中的此行。 示例:
<java-config  debug-options="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9009" debug-enabled="true"
  system-classpath="" native-library-path-prefix="D:\Project\lib\windows\64bit" classpath-suffix="">

启动或停止使用此配置的GlassFish域或服务。


74
如果您没有使用Glassfish呢? - Ann Kilzer

8

您必须设置 CHMOD +x(对于 *.sh 或 *.bat 文件进行执行)。例如,我正在使用 macOS。

cd /Users/donhuvy/Documents/tools/apache-tomcat-9.0.12/bin
sudo chmod +x *.sh

然后使用IntelliJ IDEA和Apache Tomcat进行运行或调试就可以了。


就是这样了。谢谢! - Anjil Dhamala

8

我曾遇到同样的问题,这个解决方案对我也起到了作用:在Intellij Debug配置中提供IP 127.0.0.1,而不是使用主机名“localhost”,如果你正在使用这个主机名。


1
这对我也解决了问题,经过数小时的头痛之后,这太荒谬了。为什么在任何文档中都没有提到这一点?就我而言,在正确遵循所有其他指示的情况下,这是使用IntelliJ进行远程调试的#1真正问题,它只是无法正确理解本地主机。 - sichinumi
如果您在VPN后面工作,输入127.0.0.1无法解决问题,请尝试使用VPN提供商分配给您的IP地址(在我的情况下有效)。 - chrosciu

4
在启动服务器之前,需要在glassfish\domains\domain1\config\domain.xml中进行设置。
<java-config classpath-suffix="" debug-options="-agentlib:jdwp=transport=dt_socket,address=9009,server=y,suspend=n" java-home="C:\Program Files\Java\jdk1.8.0_162" debug-enabled="true" system-classpath="">

或在 http://localhost:4848/common/index.jsf 中设置 debug-enabled="true" server=y,suspend=n

Glassfish 4 address=9009,server=y,suspend=n
  1. 在当前的Idea 2018中,进入Server Run Configuration - Debug - Port - address
  2. Server Run Configuration - Debug - Port - address

3

我希望你的问题现在已经得到解决。如果还没有,请尝试以下方法...看起来你的应用程序和IDEA都设置了server=y。IDEA应该设置为server=n。此外,(IDEA)客户端应该有一个包含主机名和端口的地址,例如:address=127.0.0.1:9009


1
这个方法对我有效- 如果问题仍然存在(假设您没有使用GlassFish服务器),那么关闭您的JIdea并停止服务器。这将禁用端口连接。然后启动您的服务器和JIdea,这将重新开始与端口的连接,解决问题。

1
对我来说,问题在于catalina.sh没有执行权限。在Intellij中出现了“无法打开调试器端口”的消息,但它掩盖了在日志中立即出现的“无法执行catalina.sh”错误。

1

如果Tomcat已经在运行,就会出现这个错误。因此,请确保如果您要求Intellij启动Tomcat(默认情况下),请不要在后台运行Tomcat。

另外,请检查完整的输出窗口以获取更多错误信息。因为可能会有一个更有用的错误先于这个错误出现(就像我刚才遇到的情况一样)


0

使用给定的命令运行Spring Boot应用程序,以便在端口8090上启动服务器时,在端口6006上启用调试:

mvn spring-boot:run -Drun.jvmArguments='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=6006' -Dserver.port=8090

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接