使用IntelliJ调试Java进程 - 连接到套接字但不连接到目标VM

时间:2011-07-12 08:06:16

标签: java debugging intellij-idea

现已解决 - 请参阅问题结尾。

我正在尝试使用IntelliJ Community Edition的调试器调试Java进程。套接字正在侦听 - 但是当我尝试连接调试过程时会显示以下内容 '连接到目标VM,地址:':8003',传输:'socket' 它永远不会连接到VM,我无法调试。

我已经转移到Windows 7 64位PC - 在我的旧XP机器上,可以连接和调试这个Java进程(这是我构建和维护的应用程序)。

如果没有进程连接,您将获得标准的“连接被拒绝:连接”错误。 Netstat还会显示应用程序运行时端口正在侦听。

TCP 0.0.0.0:8003:0 LISTENING

调试应用程序的args -Xrunjdwp:运输= dt_socket,服务器= Y,暂停= n时,地址= 8003 -Xdebug

如果我尝试从远程计算机上的IntelliJ运行调试会话,我可以连接到本地计算机上运行的进程,然后进行调试。 如果我在远程计算机上运行Java应用程序,并在本地计算机上使用IntelliJ,我可以进行调试。 只有当我在同一台机器上运行和调试它失败时 - 不幸的是,这是我几乎所有时间都需要做的事情。

我发现的唯一类似问题是2004年,与带空格的文件路径有关,而且是NetBeans,而不是IntelliJ。我已经重建并重新运行我的应用程序,确保路径中没有空格或下划线,没有欢乐。

我的intelliJ调试设置是在套接字上调试我的本地机器,附加模式端口8003 - 抱歉作为新用户我无法附加图像。

我尝试过的其他事情:

  • 更改JRE版本
  • 使用共享内存而不是套接字传输进行调试
  • 我没有重新安装IntelliJ - 我使用的是与我的伙伴(10.5 IC 107-105)相同的版本,他们没有这个问题。
  • 更改调试进程侦听的端口(从8003到其他各种,根据netstat未使用)
  • 我尝试使用PC名称,IP地址和“localhost”在调试设置中引用PC。

卡住。任何帮助非常感谢。
谢谢 史蒂夫

解决

好吧,有一天未能解决,我发现答案后20分钟找到答案。无效的JNI签名字符,仅在调试时被选中。通过在调试时添加此arg来解决。

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize =真

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6547438

感谢您的帮助。仍然不知道为什么它在远程调试时会起作用,但之前不在本地调试。

1 个答案:

答案 0 :(得分:1)

这听起来像是一个奇怪的防火墙问题。

您似乎应该可以尝试telnet localhost 8003,但它应该会失败。这意味着没有任何东西可以连接到该端口上的应用程序。

编辑:如果共享内存确实有效,并且您无法通过telnet连接它,那么运行应用程序的方式就会出现问题。

如果应用程序未运行,您将收到此类错误。

您可以尝试调试IntelliJ中的一个简单程序吗?