47

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

可能是什么原因?

4

13 回答 13

32

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

于 2014-03-31T14:21:18.053 回答
13

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

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

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

更新:可能更好的解决方案是将另一个 Eclipse 的 DDMS 端口编辑为您不使用的东西。所以它退出了比赛。

于 2013-09-30T09:49:02.380 回答
6

当我同时monitor打开 Eclipse ADT 时,这发生在我身上。尝试关闭所有与 Android 相关的东西,然后adb kill-server && sleep 5 && adb devices重新启动您的工具(Eclipse/Ant/AS)。

于 2014-06-22T12:11:43.390 回答
5

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

于 2014-06-22T12:44:46.330 回答
4

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

沟通渠道有时会中断。(可能有 100 多个原因)

要解决此问题:重新启动模拟器 (AVD)。也许您将不得不等待片刻(约 1 分钟??),以便 Eclipse 可以恢复管道通道并且您的 Log Cat 将返回。否则,重新启动 Eclipse 和模拟器以消除此错误。

于 2012-08-16T22:17:57.533 回答
2

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

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

要在它发生时解决它,您无需关闭模拟器或重新启动设备 - 关闭并重新打开 USB 调试模式应该使其再次显示在 adb 下。

于 2013-09-13T10:58:08.767 回答
2

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

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

尝试在关闭套接字的任何地方以及在允许程序终止之前暂停以查看是否有帮助。

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

于 2013-07-20T01:45:38.413 回答
1

我已经为这个问题苦苦挣扎了很长时间。每当我想使用 Chrome 的调试工具调试 android 移动应用程序时,我每 5 分钟就会断开连接。

我发现造成这种情况的原因确实是其他使用手机连接的进程在操作系统中运行,它破坏了手机和操作系统之间的通信。

我使用 Macbook Pro,我正在运行 IntelliJ IDEA 调试器 + Android 文件传输(不知道这是在后面运行)和 Chrome 的调试器工具。当我使用“活动监视器”工具关闭 Android 文件传输过程时,一切正常,手机和操作系统之间不再断开连接。我的建议是始终检查您是否正在运行其他 Android 进程。

于 2016-12-04T09:05:44.170 回答
0

当另一端的客户端关闭套接字连接时,会发生“Broken pipe”异常。大多数时候,这没什么好担心的。

于 2012-06-17T09:30:34.843 回答
0

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

重新启动 Android Studio 没有影响。

于 2016-07-17T14:08:29.370 回答
0

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

于 2018-05-01T04:37:13.403 回答
0

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

于 2016-12-10T08:44:52.150 回答
-3

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

于 2013-10-24T10:01:21.687 回答