无法使用eclipse在Java中进行调试

时间:2011-09-20 15:13:46

标签: java eclipse debugging

我正在尝试使用Eclipse作为IDE在我的机器上调试一个简单的Java应用程序。当我尝试通过进入Debug Perspective调试应用程序时,我设置了一个断点并开始调试。在几秒钟内,出现以下弹出窗口:

Launching unicodeRead has encountered a problem. Cannot connect to VM

控制台上转储的消息如下:

ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:708]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)  

我该如何纠正?为什么会这样?

11 个答案:

答案 0 :(得分:26)

我遇到了同样的问题。

昨天一切正常,现在没什么 - 和你给的一样错误。我发现网络管理员在此期间做了一些改变。防火墙有些东西。问题是Eclipse尝试在“localhost”(和一些随机端口)建立与JVM的连接。当我尝试ping localhost(或127.0.0.1)时,我得到了以下内容:

C:\Windows\system32>ping 127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.

C:\Windows\system32>ping localhost
Ping request could not find host localhost. Please check the name and try again.

它接缝在某些情况下,DNS有望解决此问题,并且如果防火墙阻止对DNS的本地主机请求 - 则会中断。我不得不改变主机文件并删除以下行中的注释,所以我不再依赖DNS了:

# 127.0.0.1       localhost
# ::1             localhost

虽然写道主机文件更改立即生效,但我认为有些进程锁定了这个并且在我的情况下重启是必要的。之后,一切都恢复了。

答案 1 :(得分:4)

看起来像here一样的问题。重新启动电脑修复了那里的问题。我还没有找到任何其他解决方案。

答案 2 :(得分:2)

非常简单,只需在eclipse.ini文件中进行以下更改。

-vm
binary\com.sun.java.jdk.win32.x86_1.6.0.u43\jre\bin\javaw.exe

答案 3 :(得分:2)

我在使用-X格式时遇到错误:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

当我切换到更新的格式时,错误消失了:

java -agentlib:jdwp=transport=dt_socket,server=y,address=4000,suspend=n myapp

答案 4 :(得分:1)

我改变了

-agentlib:jdwp=transport=dt_socket,address=9009,server=n,suspend=y

-agentlib:jdwp=transport=dt_socket,address=9009,server=y,suspend=n

就成功了!

答案 5 :(得分:1)

有同样的问题,但是解决方案是使用-server=y选项而不是-server=n运行应用程序。

之前:

java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:5005 

之后:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:5005

答案 6 :(得分:0)

我的情况是我在hosts文件中有一堆域引用127.0.0.1,如下所示:

  

127.0.0.1 localhost domian1.local domain2.local domain3.local

有一天,我添加了另一个新域名来引用127.0.0.1。错误地,我将域名放在“localhost”前面,如下所示:

  

127.0.0.1 domain4.local localhost domian1.local domain2.local domainx.local

在此之后,我总是在调试时在eclipse中得到一个警告窗口:

  

无法连接到VM   com.sun.jdi.connect.TransportTimeoutException

在控制台中:

  

错误:传输错误202:连接失败:连接被拒绝   错误:JDWP:无法通过localhost初始化传输:50470,通过127.0.0.1:50470尝试localhost   本机方法中的致命错误:JDWP没有传输初始化,jvmtiError = AGENT_ERROR_TRANSPORT_INIT(197)   错误:传输错误202:连接失败:连接被拒绝   错误:JDWP传输dt_socket无法初始化,TRANSPORT_INIT(510)   JDWP退出错误AGENT_ERROR_TRANSPORT_INIT(197):没有传输初始化[../../../ src / share / back / debugInit.c:690]

解决方案是始终将“localhost”保留在第一个位置。

  

127.0.0.1 localhost domian1.local domain2.local domainx.local domain4.local

答案 7 :(得分:0)

为我解决的是删除glassfish主文件夹上的domains文件夹中的整个domain1文件夹。 Eclipse会要求您重新创建一个域,然后一切都会再次运行。

答案 8 :(得分:-1)

由于/ etc / hosts文件发生错误,我在ubuntu计算机上遇到了同样的错误。我已经注释掉了localhost到127.0.0.1的映射,并且进一步复杂化了一个交换文件。

这是我/ etc / hosts的第一行:

127.0.0.1       #localhost

删除#修复了问题,而重新启动可以理解为没有。

答案 9 :(得分:-1)

我的事业&解决方案完全不同。
我认为在我的情况下,这是由于安装了JProfiler。我通过卸载JProfiler并使用-clean选项启动eclipse来修复它。我怀疑JProfiler是在调试器中插入自己的。 <{1}}选项迫使Eclipse重新评估其插件,因此仅此一点就足够了。

答案 10 :(得分:-4)

继续@ gonadarian的回答,似乎Eclipse使用端口127.0.0.1进行调试。此端口也称为localhost。可以删除此错误的方法是确保上述端口上没有运行任何进程或服务。在Linux上执行此操作的方法是:

  1. 作为root,输入命令:
    netstat -tulpn | grep 127.0.0.1

  2. 如果上述端口上有进程正在运行,它将以以下格式显示:
    process_id/process name

  3. 完成上述过程:kill -KILL process_id

  4. 重新启动计算机以使这些更改生效。不应再出现错误。