【发布时间】:2013-01-27 08:18:12
【问题描述】:
我已经在 hacking 和谷歌上搜索了一段时间,我发现了几个 statck 溢出线程,它们似乎是为旧版本的 intellij 编写的,具有各种应用程序服务器。通常他们会告诉你输入
java -Xdebug -Xrunjdwp:transport=dt_socket,address=51887,suspend=n,server=y
One answer 建议使用类似的东西
-agentlib:jdwp:transport=dt_socket,address=51887,suspend=n,server=y
但后来我明白了:
Error occurred during initialization of VM
Could not find agent library: libjdwp:transport.jnilib (searched /Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Libraries:/System/Library/Java/Extensions:/Library/Java/Extensions:.)
然后在上面的一个或另一个之后,他们会告诉你类似“编辑配置>码头>远程并输入本地主机,51887”(端口号不同)
但是在 12 中,您选择远程后登陆的页面有很多选项,并且在另一个选项卡上询问 JNDI 端口,而不是 jdwp 端口,它实际上建议了上面的 jdwp 参数。
研究 JNDI 端口位,通常会产生将这样的 args 添加到命令行的指令...
-Dcom.sun.management.jmxremote= \
-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false\
我也这样做了,我可以看到 java 持有的端口 1099(使用 lsof),我可以远程登录到 1099,所以我知道 JVM 正在侦听。 (我们会尽量不担心这样一个事实,即打开一个端口,任何人都可以通过该端口通过网络将任意 java 代码安装到您的计算机上而无需密码)
但是,在 Intellij 中,每当我尝试部署和调试时,它都会给我以下消息:
当我使用wireshark 窥探端口1099 时,我可以看到超过1099 的java RMI 通信(但它们难以辨认)。显然,Intellij 的通信并不令人满意,所以我想知道我是否需要对 Jetty 做些什么才能让它发挥得更好。请注意,目前无法选择更改 Jetty 版本,所以我们不要去那里:)。
我还尝试删除工件、禁用 make 并尝试仅连接调试器,但它仍然给我相同的红色气球和错误消息,因此显然需要 JNDI(端口 1099)部分。
有没有人看到我做错了什么,或者知道我应该做些什么来让它工作?
(我想知道是不是和这个类似:http://youtrack.jetbrains.com/issue/IDEA-65746jboss issue)
编辑:感谢this google groups post,我发现如果您不指定编辑配置> + >码头>远程,则可以连接调试器,而是选择编辑配置> + > 远程,但调试和部署是我所追求的,所以这只是解决方案的一半。
【问题讨论】:
-
我认为我看到通过wireshark 连接到1099 的事实消除了DNS 问题的可能性。显然已建立连接,但通信失败
标签: intellij-idea jetty remote-debugging