导致IOException和Broken管道的原因

时间:2012-06-16 17:16:12

标签: android avd

我的AVD是API 15,我不知道为什么但是每当我在模拟器上运行应用程序时,以下消息都会出现。除了控制台中的错误消息外,它似乎没有造成任何麻烦。

[2012-06-17 00:03:26 - ddmlib] Broken pipe
java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:122)
    at sun.nio.ch.IOUtil.write(IOUtil.java:93)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:352)
    at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
    at com.android.ddmlib.Client.sendAndConsume(Client.java:575)
    at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
    at com.android.ddmlib.Client.requestAllocationStatus(Client.java:421)
    at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:837)
    at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:805)
    at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:765)
    at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
    at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
    at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)

可能是什么原因?

12 个答案:

答案 0 :(得分:31)

如果有人同时使用eclipse和android studio,则eclipse会抛出此错误。因此,即使您通过DDMS选择设备,它也会抛出此错误。

答案 1 :(得分:12)

老问题,但仍然相关,我没有看到任何其他答案与此信息:

对我来说,当另一个Eclipse同时运行时,它发生了,DDMS在与试图连接到Android设备的eclipse相同的套接字上竞争。

解决方案是关闭另一个Eclipse。希望它可以帮到某人。

更新:可能更好的解决方案是将另一个日食的DDMS端口编辑为您不使用的内容。所以它已经退出了比赛。

答案 2 :(得分:6)

当我同时打开monitor和Eclipse ADT时,发生了这种情况。尝试关闭所有与Android相关的内容,然后执行adb kill-server && sleep 5 && adb devices,然后再次启动工具(Eclipse / Ant / AS)。

答案 3 :(得分:5)

'断管'表示您已将数据写入已由对等方关闭的连接。解决方案:不要。它本质上是一个应用程序协议错误。

答案 4 :(得分:4)

我猜客户端(Eclipse)通过管道协议与服务器(您的仿真器)进行通信(众所周知,该协议可以在同一台机器上进行2个进程的通信)。

有时可以破坏通信渠道。 (可能有100多个原因)

要解决此问题:重新启动模拟器(AVD)。也许你将不得不等待片刻(〜1分钟??),以便Eclipse可以恢复管道通道,你的Log Cat将会返回。否则,重启Eclipse&模拟器摆脱这个错误。

答案 5 :(得分:2)

我遇到“断管”的最常见原因是一台机器(通过插座进行通信的一对机器)在通信完成之前关闭了它的插座端。其中大约一半是因为在该套接字上进行通信的程序已经终止。

如果程序发送字节将它们发送出去并立即关闭套接字或自行终止,则套接字可能会在传输和读取字节之前停止运行。

尝试在暂停套接字的任何地方暂停,然后再允许程序终止以查看是否有帮助。

仅供参考:“管道”和“套接字”是有时可互换使用的术语。

答案 6 :(得分:2)

我最近经常发现这种情况(每5分钟左右)。 如果我同时运行物理设备和模拟器,频率似乎会增加。

停止使用模拟器并且只使用物理设备进行调试会阻止它经常发生 - 现在我每天只看一次或两次。

要在发生这种情况时解决问题,您无需关闭模拟器或重新启动设备 - 关闭USB调试模式并重新启动它应该会在adb下重新显示。

答案 7 :(得分:0)

我正在使用Android Studio和DDMS。关闭DDMS为我解决了这个问题。

重新启动Android Studio没有任何影响。

答案 8 :(得分:0)

如果其他人没有找到任何解决方案。在eclipses Neon中,当插件目录中有两个DDMS jar时发生这种情况。我有andmore.ddms.jar和com.android_ddms.jar。删除一个解决了错误,我猜他们都竞争连接到同一个端口。

答案 9 :(得分:0)

重启android设备解决了我的问题

答案 10 :(得分:-1)

当另一端的客户端关闭套接字连接时,会出现“Broken pipe”异常。大部分时间这都不用担心。

答案 11 :(得分:-3)

就我而言,我删除了主目录中的.android。 那没关系。