无法在IDEA IntelliJ 12中调试Java项目

5
在OSX系统下,使用Tomcat7和IDEA IntelliJ 12。
运行配置能够正常工作。 调试配置会出现以下错误:
    /usr/local/Cellar/tomcat/7.0.37/libexec/bin/catalina.sh run
    Error occurred during initialization of VM
    agent library failed to init: jdwp
    ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.
    Disconnected from server

我发现了这篇来自2011年的帖子,但它并没有帮到我。
关于“一旦我从系统变量中删除它(在IDEA中是只读的),问题就解决了”的注释很有道理。所以我尝试将这整个代码块从catalina.sh中删除。
    if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
    fi

没有帮助。非常感谢任何帮助。谢谢!

Java运行命令:

    + eval exec '"/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java"' '"-Djava.util.logging.config.file=/Users/ryan/Library/Caches/IntelliJIdea12/tomcat/Unnamed_secure_post_3/conf/logging.properties"' -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:65523,suspend=y,server=n -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager '-Djava.endorsed.dirs="/usr/local/Cellar/tomcat/7.0.37/libexec/endorsed"' -classpath '"/usr/local/Cellar/tomcat/7.0.37/libexec/bin/bootstrap.jar:/usr/local/Cellar/tomcat/7.0.37/libexec/bin/tomcat-juli.jar"' '-Dcatalina.base="/Users/ryan/Library/Caches/IntelliJIdea12/tomcat/Unnamed_secure_post_3"' '-Dcatalina.home="/usr/local/Cellar/tomcat/7.0.37/libexec"' '-Djava.io.tmpdir="/usr/local/Cellar/tomcat/7.0.37/libexec/temp"' org.apache.catalina.startup.Bootstrap start

你能展示一下实际运行的命令行调用吗(在catalina.sh中调用'java'可执行文件时)? - mpierce
我不明白。我将我的war文件复制到Tomcat的webapps目录中并运行catalina。 - Ryan
这是我的IntelliJ调试配置:http://cl.ly/image/3R1c12230Z1t。我修改了catalina.sh文件,在执行Java运行命令之前加入了echo语句。但是,我在任何日志中都看不到这个输出。不确定该去哪里查找。尝试过catalina.out,也没有在IntelliJ控制台中看到任何输出。 - Ryan
更新了原始帖子,并附加了Java运行命令。清楚地显示了重复的jdwp配置。我无法在IntelliJ选项中删除它,因此需要找出从启动脚本中删除它的位置。catalina.sh文件设置了它,但我已经将其删除了。JAVA_OPTS在其他地方被设置,但我尚未追踪到它的位置。 - Ryan
很奇怪,看一下 catalina.sh,这些选项只有在使用 jpda start 命令行参数运行时才会添加,而在控制台中明显显示使用了 run。使用 run 选项,Tomcat 将使用通过 JAVA_OPTS 从 IDEA 传递的 JVM 选项,并且不会添加 JPDA_OPTS。这在 Windows、Linux 和 Mac 上都可以完美地工作。 - CrazyCoder
显示剩余7条评论
2个回答

4
问题在于catalina.sh调用了setenv.sh,而setenv.sh设置JAVA_OPTS的方式如下:
    JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"

我不知道这个setenv.sh文件从哪里来,因为同事使用的Homebrew安装的Tomcat没有这个文件。

目前,我已经配置了IntelliJ Debug使用catalina_idea_debug.sh,它只是catalina.sh的副本,除了不调用setenv.sh。现在一切都很好。


FYI,根据catalina.sh的建议,setenv.sh是包含属性的建议方式。然而,正如你指出的那样,使用setenv.sh似乎在Idea中不起作用。 - gpol
我在Windows上使用Intellij 15的Tomcat运行配置时也遇到了同样的问题。我只是将setenv.bat文件重命名为setenv.bat.old,然后再次运行配置,现在调试可以正常工作了。 - Brod
在使用docker-compose创建新项目时,将setenv.sh作为卷包含进去,导致我在compose环境中设置的JPDA_ADDRESS变量无法工作。我删除了这个文件,并简单地使用环境变量取代它。谢谢! - Gabe Gates

0

我在使用IntelliJ和JBoss时遇到了类似的问题。对我来说,standalone.conf中指定了包含jdwp配置的JAVA_OPTS。将其注释掉后,我就能够从IntelliJ进行调试了。

也许这可以帮助其他搜索此短语的人,因为互联网上没有太多相关信息。


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