现在已解决 - 请参阅问题结尾。
我正在尝试使用 IntelliJ Community Edition 的调试器调试 Java 进程。套接字正在监听 - 但是当我尝试连接调试过程时显示以下内容 '连接到目标虚拟机,地址:':8003',传输:'socket' 它永远不会连接到 VM,我无法调试。
我已经转移到 Windows 7 64 位 PC - 在我的旧 XP 机器上,可以连接和调试这个 Java 进程(这是我构建和维护的应用程序)。
它不会因标准的“连接被拒绝:连接”错误而失败,如果没有进程可连接,您会得到这种错误。 Netstat 还会在应用程序运行时显示正在监听的端口。
TCP 0.0.0.0:8003 :0 监听
应用的调试参数 -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8003 -X调试
如果我尝试从远程机器上的 IntelliJ 运行调试 session ,我可以连接到本地机器上运行的进程并进行调试。 如果我在远程机器上运行 Java 应用程序,并在我的本地机器上使用 IntelliJ,我就可以进行调试。 只有当我在同一台机器上运行和调试时它才会失败 - 不幸的是,这几乎是我一直需要做的。
我发现的唯一类似问题是从 2004 年开始的,与带空格的文件路径有关,而且是 NetBeans,而不是 IntelliJ。我已经重建并重新运行我的应用程序,确保路径中没有空格或下划线,没有喜悦。
我的 intelliJ 调试设置是在套接字上调试我的本地机器,附加模式端口 8003 - 作为新用户,抱歉我无法附加图像。
我尝试过的其他事情:
- 更改 JRE 版本
- 使用共享内存而不是套接字传输进行调试
- 我没有重新安装 IntelliJ - 我使用的是与没有此问题的其他开发人员 (10.5 IC 107-105) 相同的版本。
- 更改调试进程监听的端口(从 8003 到各种其他,根据 netstat 未使用)
- 我试过在调试设置中使用 PC 名称、IP 地址和“本地主机”来指代 PC。
卡住了。非常感谢任何帮助。
谢谢
史蒂夫
已解决
好吧,一天没能解决,然后我在发布后 20 分钟找到了答案。无效的 JNI 签名字符,仅在调试时拾取。通过在调试时添加此 arg 解决。
-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6547438
感谢您的帮助。仍然不知道为什么它在远程调试时会起作用,而以前在本地调试时却不起作用。
最佳答案
这听起来像是一个奇怪的防火墙问题。
看来您应该可以尝试 telnet localhost 8003
但应该会失败。这意味着没有任何东西可以连接到该端口上的您的应用。
编辑:如果共享内存也能正常工作,但您无法通过 telnet 连接它,则说明您运行应用程序的方式有问题。
如果应用程序未运行,您将收到此类错误。
你能尝试调试一个你从 IntelliJ 启动的简单程序吗?
关于java - 使用 IntelliJ 调试 Java 进程 - 连接到套接字但不连接到目标 VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661166/