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

标签 java debugging intellij-idea

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

我正在尝试使用 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/

相关文章:

c++ - Valgrind 错误因操作系统而异

intellij-idea - Gradle War插件更改文件名称

java - 匹配出现次数最多的字符串

java - 如何对有界缓冲区实现同步检查以避免竞争条件?

objective-c - 如何使用 Xcode 4 断点 Action

javascript - IE9调试器-在 "Script"选项卡上,调试时 "Others"部分的脚本是什么?

java - Maven 不会安装 pom 文件中的所有内容,导致 "Missing Required Library"x 124

java - 为依赖于其他项目的项目运行 ant 脚本

intellij-idea - Intellij用JAXB生成java代码返回xsd文件

java - Maven 无法解决依赖关系