什么导致IOException和Brokenpipe道

我的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) 

可能是什么原因?

如果有人同时使用eclipse和android studio,那么这个错误会被eclipse抛出。 所以即使你通过DDMSselect设备,它也会抛出这个错误。

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

对于我来说,当另一个Eclipse同时运行时,DDMS与eclipse尝试连接到Android设备时在同一套接字上竞争。

解决scheme是closures另一个Eclipse。 希望它可以帮助别人。

更新 :可能更好的解决scheme是编辑其他eclipse的DDMS端口到你不使用的东西。 所以这场比赛没有了。

当我同时打开monitor和Eclipse ADT时,发生了这种情况。 尝试closures所有Android相关的东西,然后做一个adb kill-server && sleep 5 && adb devices ,然后再次启动你的工具(Eclipse / Ant / AS)。

“断开的pipe道”意味着您已经将数据写入到已被对等closures的连接。 解决方法:不要。 这本质上是一个应用程序协议错误。

我想客户端(Eclipse)通过Pipe协议与服务器(你的Emulator)进行通信(这个协议在同一台机器上是通信2进程的)。

沟通渠道有时可能被打破。 (可能有100多个原因)

要解决这个问题:重新启动模拟器(AVD)。 也许你将不得不等待一会儿(~1分钟??)所以Eclipse可以恢复pipe道,你的日志猫会返回。 否则,重新启动Eclipse和模拟器摆脱这个错误。

对于“破损的pipe道”,我最常见的原因是一台机器(通过套接字进行通信的一台机器)在通信完成之前closures了套接字的末端。 其中大约一半是因为在该套接字上通信的程序已经终止。

如果发送字节的程序将其发送出去并立即closures套接字或自行终止,则在传输和读取字节之前套接字可能会停止工作。

尝试在你closures套接字的任何地方暂停,然后让程序终止,看看是否有帮助。

仅供参考:“pipe道”和“sockets”是有时可互换使用的术语。

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

停止仿真器,只使用物理设备进行debugging,阻止它发生 – 现在我只能每天看到它一次或两次。

要解决这个问题,你不需要closures仿真器或者重新启动设备 – closuresUSBdebugging模式并重新打开应该使它在adb下重新显示。

我一直在努力解决这个问题很长一段时间。 每当我想用Chrome的debugging工具debuggingandroid手机应用程序时,我每隔5分钟就会断开连接。

我发现这个事实的原因实际上就是在OS中使用手机连接手机的其他过程,这些手机打破了手机和操作系统之间的通信。

我使用Macbook Pro,并运行IntelliJ IDEAdebugging器+ Android文件传输(不知道这是在后面运行)和Chrome的debugging工具。 当我用“活动监视器”工具closuresAndroid文件传输过程时,一切运行良好,手机和操作系统之间没有更多的断开。 我的build议是检查一下,如果你正在运行其他Android进程。

我正在使用Android Studio和DDMS。 closuresDDMS解决了我的问题。

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

如果其他人没有find任何解决办法。 在日食霓虹灯,这发生在插件目录中有两个DDMSjar。 我有andmore.ddms.jar和com.android_ddms.jar。 删除一个解决了错误,我猜他们都竞争连接到同一个端口。

当套接字连接被另一端的客户端closures时,会发生“断开的pipe道”exception。 大多数时候这是没有什么可担心的。

在我的情况下,我删除我的主目录中的.android。 没关系。