2012-06-16 115 views
42

私のAVDはAPI 15ですが、理由はわかりませんが、エミュレータでアプリケーションを実行するたびに次のメッセージが表示され続けます。コンソールのエラーメッセージを除いて何の問題も生じていないようです。IOExceptionと壊れたパイプの原因

[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) 

何か原因が考えられますか?

答えて

-1

"壊れたパイプ"例外は、ソケット接続が相手側のクライアントによって閉じられた場合に発生します。ほとんどの場合、これは心配するものではありません。

+0

なぜ、他のサイズでクライアントを閉じることができますか? – manuzhang

+0

相手側のプログラムが終了したか、ユーザーが要求を停止しました。たとえば、HTMLページ内のリンクをクリックすると、ブラウザは他のすべての保留中の要求を閉じます。サーバーはこれらの「破損パイプ」例外に遭遇します。 – user789805

+0

エミュレータでアプリケーションを実行しただけで私の疑いが起こるのはなぜですか? – manuzhang

4

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

通信チャネルが切断されることがあります。 (可能性は100+以上の理由があります)

この問題を解決するには、エミュレータ(AVD)を再起動します。 Eclipseがパイプチャンネルを復元できるようにして、あなたのLog Catが戻るようにしばらく待たなければならないかもしれません(〜1分??)。それ以外の場合は、Eclipse &を再起動してこのエラーを取り除いてください。

+0

エミュレータを再起動しましたが、まだこの問題がありました。私はAVDマネージャーに行き、AVDを削除して新しいAVDを作成することによって、良いパイプを手に入れることができました。理由は分かりませんが、問題が修正されました。 –

+2

AVDが壊れている場合は、AVDマネージャーを開こうと試みることができます。> [スタート]> [ユーザーデータを消去]をチェックしてAVDをリセットします。 – Hiep

+0

間違った推測。例外は、パイプではなくソケットを使用していることを明確にしています。 – EJP

2

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

プログラム送信バイトがそれらを送信し、すぐにソケットをシャットダウンしたり終了したりすると、バイトが送信されて読み込まれる前にソケットが機能しなくなる可能性があります。

ソケットをシャットダウンしている場所で、プログラムが終了するのを待ってから、問題が解決するかどうかを確認してください。

FYI:「パイプ」と「ソケット」は、ときどき互換的に使用される用語です。

+0

プログラムがデータを送信してソケットを閉じると、ソケットはすべてが確認応答されるか、または障害が発生するまでデータを送信し続けます。ネットワークプログラムに一時停止を追加するだけで、根底にある問題の誤解が示されます。それは何も解決しません。 – EJP

2

最近、このようなことが頻繁に(5分ごとに)発生していました。 物理デバイスとエミュレータの両方が動作していた場合、周波数が上昇しているように見えました。

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

この問題を解決するには、エミュレータを終了するか、デバイスを再起動する必要はありません.USBデバッグモードをオフにしてから再度オンにする必要があります。

12

古い質問が、それでも、関連すると私は、この情報を他の回答を見ていない:

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

解決方法は他のEclipseを閉じることでした。誰かを助けることを願っています。

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

+1

これは私のために働いた唯一の解決策です。ゲストアカウントと私のユーザーアカウントでEclipseを実行しているときにこの問題が発生しました。ゲストアカウントでEclipseを無効にすると、問題は解決されました。 –

+0

私の場合はEclipseと並行して動作していたAndroid Studioでした。 – tmanthey

-3

私の場合は、ホームディレクトリの.androidを削除します。 これはOKです。

31

誰かがEclipseとAndroidの両方のスタジオを一緒に使用している場合、このエラーはEclipseによってスローされます。 DDMSでデバイスを選択しても、このエラーが発生します。

6

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

+0

また、アプリを起動した他のAndroid Studioのインスタンスを閉じます。 – Mafro34

+0

私は 'adb kill-server'を使うだけで私の問題に対処していることがわかりました。 – ThomasW

5

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

0

私はAndroidスタジオとDDMSの両方を使用していました。 DDMSを閉じて私の問題を解決しました。

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

1

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

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

私はMacBook Proを使用しており、IntelliJ IDEAデバッガ+ Androidファイル転送(これは実行されていなかったことは知らなかった)とChromeのデバッガツールを実行していました。 「Activity Monitor」ツールを使用してAndroidファイル転送プロセスを終了すると、すべてがうまくいっていたため、携帯電話とOSの接続が解除されなくなりました。私の提案は、あなたが他のAndroidプロセスを実行しているかどうかを常に確認することです。

0

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

関連する問題