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

これは、Eclipse ADT と Eclipse ADT の両方を開いたときに発生しましたmonitor。すべての Android 関連のものを閉じてから aを実行してadb kill-server && sleep 5 && adb devicesから、ツール (Eclipse/Ant/AS) を再度起動してみてください。

于 2014-06-22T12:11:43.390 に答える
5

「壊れたパイプ」は、ピアによって既に閉じられている接続にデータを書き込んだことを意味します。解決策: しないでください。これは本質的にアプリケーション プロトコル エラーです。

于 2014-06-22T12:44:46.330 に答える
4

クライアント (Eclipse) はサーバー (エミュレーター) とパイプ プロトコルで通信していると思います (このプロトコルは、同じマシン上で 2 つのプロセスを通信するためによく知られています)。

通信チャネルが壊れることがあります。(100以上の理由が考えられます)

この問題を解決するには、エミュレータ (AVD) を再起動します。Eclipse がパイプ チャネルを復元し、Log Cat が返されるように、しばらく (~1 分??) 待つ必要があるかもしれません。それ以外の場合は、Eclipse とエミュレーターの両方を再起動して、このエラーを解消してください。

于 2012-08-16T22:17:57.533 に答える
2

私が経験した「壊れたパイプ」の最も一般的な理由は、(ソケットを介して通信しているペアの) 1 台のマシンが、通信が完了する前にソケットの端をシャットダウンしたことです。その約半分は、そのソケットで通信しているプログラムが終了したためです。

バイトを送信するプログラムがそれらを送信し、すぐにソケットをシャットダウンするか、それ自体を終了する場合、バイトが送信され読み取られる前にソケットが機能を停止する可能性があります。

ソケットをシャットダウンし、プログラムを終了させる前に一時停止を入れて、それが役立つかどうかを確認してください。

参考までに: 「パイプ」と「ソケット」は、時々同じ意味で使用される用語です。

于 2013-07-20T01:45:38.413 に答える
2

最近、これが頻繁に(5分ごとに)発生していることに気付きました。物理デバイスとエミュレーターの両方を実行していると、頻度が高くなるように見えました。

エミュレーターを停止し、デバッグに物理デバイスのみを使用すると、頻繁に発生しなくなりました。今では、1 日に 1 回か 2 回しか表示されません。

問題が発生したときに解決するには、エミュレータを閉じたり、デバイスを再起動したりする必要はありません。USB デバッグ モードをオフにしてからオンに戻すと、adb の下に再び表示されるはずです。

于 2013-09-13T10:58:08.767 に答える
1

私はこの問題に長い間苦労してきました。Chrome のデバッグ ツールを使用して Android モバイル アプリケーションをデバッグしようとすると、5 分ごとに切断されました。

その原因は、確かにOSの背後で動作している携帯電話への接続を使用している別のプロセスであり、携帯電話とOSの間の通信を切断していることがわかりました。

私は Macbook Pro を使用しており、IntelliJ IDEA デバッガー + Android File Transfer (これが背後で実行されていることを知りませんでした) と Chrome のデバッガー ツールを実行していました。「Activity Monitor」ツールを使用して Android ファイル転送プロセスを閉じたところ、すべてが正常に機能し、携帯電話と OS の間の接続が切断されることはなくなりました。私の提案は、他の Android プロセスを実行しているかどうかを常に確認することです。

于 2016-12-04T09:05:44.170 に答える
0

「パイプの破損」例外は、ソケット接続が反対側のクライアントによって閉じられたときに発生します。ほとんどの場合、これは心配する必要はありません。

于 2012-06-17T09:30:34.843 に答える
0

Android Studio と DDMS の両方を使用していました。DDMSを閉じると、問題が解決しました。

Android Studio を再起動しても影響はありませんでした。

于 2016-07-17T14:08:29.370 に答える