Подтвердить что ты не робот

Что вызвало 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)

В чем может быть причина?

4b9b3361

Ответ 1

Если кто-то использует оба eclipse и android studio вместе, то эта ошибка будет выбрана eclipse. Таким образом, даже если вы выберете устройство через DDMS, он собирается выбросить эту ошибку.

Ответ 2

Старый вопрос, но по-прежнему актуальный, и я не видел другого ответа с этой информацией:

Для меня это произошло, когда другой Eclipse работал одновременно, причем DDMS конкурирует за тот же сокет, что и eclipse, пытающийся подключиться к устройству Android.

Решение заключалось в закрытии другого Eclipse. Надеюсь, это поможет кому-то.

Обновление. Вероятно, лучшим решением является отредактировать порт DDMS другого затмения для того, что вы не используете. Так что это из гонки.

Ответ 3

Это случилось со мной, когда у меня были оба monitor и Eclipse ADT open. Попробуйте закрыть все связанные с Android вещи, а затем выполните adb kill-server && sleep 5 && adb devices, а затем запустите инструмент (Eclipse/Ant/AS).

Ответ 4

"Сломанная труба" означает, что вы написали данные в соединение, которое уже было закрыто одноранговым узлом. Решение: не надо. Это, по сути, ошибка протокола приложения.

Ответ 5

Я предполагаю, что клиент (Eclipse) обменивается данными с сервером (вашим эмулятором) по протоколу Pipe (этот протокол хорошо знает для связи 2 процесса на одном компьютере).

Иногда канал связи может быть поврежден. (Возможны еще 100 причин)

Чтобы решить эту проблему: перезапустите эмулятор (AVD). Возможно, вам придется подождать минутку (~ 1 мин.), Поэтому Eclipse может восстановить канал трубы, и ваш Log Cat вернется. В противном случае перезапустите оба Eclipse и эмулятор, чтобы избавиться от этой ошибки.

Ответ 6

Самая распространенная причина, по которой я столкнулся с "сломанным трубой", состоит в том, что одна машина (пары, подключаемой через сокет) закрыла свой конец сокета до того, как связь была завершена. Около половины из них были связаны с тем, что программа, сообщающая об этом сокете, завершилась.

Если программа, отправляющая байты, отправляет их и немедленно отключает сокет или завершает себя, возможно, что сокет перестает функционировать до того, как байты будут переданы и прочитаны.

Попробуйте помещать паузы в любом месте, где вы закрываете сокет, и перед тем, как разрешить программе завершить работу, чтобы узнать, помогает ли это.

FYI: "pipe" и "socket" - это термины, которые иногда используются как взаимозаменяемые.

Ответ 7

Я заметил это часто (каждые 5 минут или около того). Частота, казалось, увеличивалась, если у меня было как физическое устройство, так и эмулятор.

Остановка эмулятора и использование только физического устройства для отладки перестали происходить так часто: теперь я вижу его только один или два раза в день.

Чтобы решить эту проблему, вам не нужно закрывать эмулятор или перезагружать устройство - отключение и отключение режима USB-отладки должно заставлять его снова отображаться под adb.

Ответ 8

Я долгое время боролся с этой проблемой. Всякий раз, когда я хотел отлаживать мобильное приложение Android с помощью инструмента отладки Chrome, я отключился каждые 5 минут.

Я выяснил, что причиной этого является другой процесс, связанный с подключением к мобильному телефону, который работает в ОС, что нарушает связь между мобильным телефоном и ОС.

Я использую Macbook Pro, и я запускал IntelliJ IDEA debugger + Android File Transfer (не знал, что это работает) и инструмент отладчика Chrome. Когда я закрыл процесс передачи файлов Android с помощью инструмента "Монитор активности", все работало хорошо, больше не было разъединения между мобильным телефоном и ОС. Мое предложение - всегда проверять, если вы работаете с другим процессом Android.

Ответ 9

Я использовал Android Studio и DDMS. Закрытие DDMS устранило проблему для меня.

Перезапуск Android Studio не повлиял.

Ответ 10

В случае, если кто-либо еще не нашел никакого решения для этого. В затмениях Neon это произошло, когда у меня было два DDMS-баночки в каталоге плагинов. У меня были andmore.ddms.jar и com.android_ddms.jar. Удаление одного разрешает ошибку, я думаю, они оба конкурируют за подключение к одному и тому же порту.

Ответ 11

перезагрузка устройства Android исправила мою проблему

Ответ 12

Исключение "Сломанная труба" возникает, когда соединение сокета закрывается клиентом с другой стороны. Большую часть времени это не о чем беспокоиться.

Ответ 13

В моем случае я удаляю .android в своем домашнем каталоге. Это хорошо.