web-dev-qa-db-ja.com

IOExceptionとBroken pipeの原因

私の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)

原因は何でしょうか?

44
manuzhang

誰かがEclipseとAndroid studioの両方を使用すると、Eclipseによってこのエラーがスローされます。DDMSを介してデバイスを選択しても、このエラーがスローされます。

31

古い質問ですが、関連性があり、この情報に関する他の回答は見られませんでした:

私にとっては、別のEclipseが同時に実行されていて、DDMSがEclipseと同じソケットを介してAndroidデバイスに接続しようと競合しています。

解決策は、他のEclipseを閉じることでした。それが誰かを助けることを願っています。

更新:おそらくより良い解決策は、他のEclipseのDDMSポートを使用しないものに編集することです。だから、それはレース外です。

12
Amir Uval

これは、monitorとEclipse ADTの両方を開いたときに起こりました。 Android関連するものをすべて閉じてから、adb kill-server && sleep 5 && adb devicesそして、ツール(Eclipse/Ant/AS)を再度開始します。

6
kizzx2

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

5
user207421

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

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

この問題を解決するには、エミュレーター(AVD)を再起動します。たぶん、EclipseがPipeチャンネルを復元してLog Catが戻るように、しばらく(〜1分??)待つ必要があります。それ以外の場合は、Eclipseとエミュレーターの両方を再起動して、このエラーを取り除きます。

4
Hiep

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

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

ソケットをシャットダウンしている場所、およびプログラムが終了するのを許可する前に、一時停止を入れてみてください。

参考までに、「パイプ」と「ソケット」は、時々交換可能に使用される用語です。

2
Suresh Parmar

私は最近、これが頻繁に(5分ごとに)起こることに気付きました。物理デバイスとエミュレーターの両方を実行している場合、頻度は増加するように見えました。

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

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

2
Ben Pearson

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

この原因は、OSの背後で実行されている携帯電話への接続を使用する他のプロセスであり、携帯電話とOSの間の通信が切断されていることがわかりました。

私はMacbook Proを使用していて、IntelliJ IDEAデバッガー+ Androidファイル転送(これが実行されていることを知らなかった)とChromeのデバッガーツールを実行していました。 closed Android「Activity Monitor」ツールを使用したファイル転送プロセスはすべて正常に機能し、携帯電話とOSの接続は切断されません。他のAndroidプロセス。

1
Amir Al

他の誰かがこれに対する解決策を見つけられなかった場合。ネオンの日食では、プラグインディレクトリに2つのDDMS jarがあったときにこれが発生しました。 andmore.ddms.jarとcom.Android_ddms.jarがありました。 1つを削除するとエラーが解決します。両方が同じポートに接続するために競合すると思います。

0
Bantu

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

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

0
Varun Bhatia

Androidデバイスを再起動すると問題が解決しました

0
Mr.Ghamkhar