Не удалось открыть выбранный порт отладки виртуальной машины (8700) - PullRequest
31 голосов
/ 10 мая 2010

Я пытаюсь отладить источник Android с помощью Eclipse, следуя инструкциям, найденным по адресу:

http://source.android.com/using-eclipse

Я скачал исходный код и получил его для сборки. Я следую инструкциям в ссылке выше, и все хорошо, пока я не запускаю команду ddms. На этом этапе, если Eclipse работает, я получаю сообщение об ошибке «Не удалось открыть выбранный порт отладки виртуальной машины (8700)». Если я закрою Eclipse, то ddms запускается без проблем, и я могу процессы на эмуляторе. Однако если я сейчас открою Eclipse, я получу ту же ошибку.

В любом случае, независимо от того, что я делаю, при попытке удаленной отладки всегда происходит сбой с сообщением «Не удалось подключиться к удаленной ВМ».

Есть идеи?

Спасибо

Ответы [ 12 ]

19 голосов
/ 10 мая 2010

Похоже, у вас есть две проблемы:

  1. Вы пытаетесь запустить DDMS дважды. Вам не нужно запускать автономную версию DDMS, поскольку ее версия интегрирована в Eclipse как часть плагина Android. Если вы переключитесь на перспективу DDMS в Eclipse, я уверен, что вы обнаружите, что все те же функции доступны.

  2. Вы не сообщили DDMS, какую виртуальную машину вы хотите отлаживать на локальном хосте: 8700. Прежде чем пытаться установить удаленное отладочное соединение, вы должны перейти в перспективу DDMS и нажать на system_process (или любой другой процесс, который вы хотите отладить).

16 голосов
/ 21 сентября 2011

Неверный файл хоста Windows находится на C:\WINDOWS\system32\drivers\etc и должен содержать следующую строку:

127.0.0.1 localhost

Если это не сработает, попробуйте внести следующие изменения в Eclipse.

Под окном -> Настройки -> Android -> DDMS:

  • Установить базовый порт локального отладчика на «8601»
  • Установите флажок «Использовать ADBHOST» и значение должно быть 127.0.0.1
7 голосов
/ 26 июня 2012

Я решил это, завершив процесс "adb.exe" через диспетчер задач, а затем перезагрузив SDK через Windows-> Preference..Я запускаю Eclipse Indigo на 64-битной Win 7.

4 голосов
/ 06 октября 2014

Я решил это, открыв диспетчер задач Windows и закрыв процесс «adb.exe». Затем закройте затмение и снова откройте его. Это начнется правильно, без каких-либо ошибок.

4 голосов
/ 13 июля 2012

У меня тоже была эта проблема (Windows 7), хотя мой файл / Windows / system32 / drivers / etc / hosts уже содержал 127.0.0.1 localhost.

Я попытался изменить информацию и порт ADBHOST в настройках eclipse, но это ничего не дало.

netstat -b показывает «127.0.0.1» в качестве адреса источника для adb и эмулятора, но всегда отображает имя хоста моей машины в качестве «внешнего адреса». По догадкам я попробовал отладку с моей машиной , не подключенной к какой-либо сети (без WiFi, ничего не подключено) ... и это сработало! (DDMS смог подключиться к виртуальной машине на эмулируемом устройстве, и я смог отладить очень хорошо.)

Я думаю, что сообщения, отправленные DDMS и / или adb, не остаются на моем локальном компьютере (они отправляются на мой локальный маршрутизатор). (Это всего лишь предположение; я не знаю, как окончательно это проверить.) А, шлейф не работал должным образом.

Поскольку у меня уже было 127.0.0.1 в моих локальных хостах, я добавил адрес локальной подсети моей машины в мой файл hosts, предполагая, что DDMS / adb может использовать этот адрес (вместо 127.0.0.1). Это, казалось, решило проблему для меня.

Так что теперь мой файл hosts имеет следующие строки:

127.0.0.1       localhost
::1             localhost
192.168.1.102       localhost

(Локальный IPv4-адрес для моей машины 192.168.1.102 . Вы можете проверить свой с помощью команды ipconfig.)

(я сталкивался с некоторыми веб-страницами о том, как настроить виртуальный сетевой адаптер для Windows, который обрабатывает обратную связь, например, Настройка Microsoft Loopback Adapter (из Oracle Distilled) , но не успел возьмите это и посмотрите, является ли это жизнеспособным решением для всего этого тоже.)

2 голосов
/ 27 марта 2015

Это для справки. Но я думаю, это может соответствовать вашему случаю.

Порт 8700 - это особый порт для ddms; нет возможности изменить порт. Порт 8700 используется для агрегирования пакета от каждой виртуальной машины Dalvik.

Будет два случая;

case 1) Если вы установите для «Базового локального порта отладчика» (в диалоговом окне предпочтений dcl-ов Eclipse) значение 8700, то вы увидите ошибку - «Не удается привязаться к локальному 8700 для отладчика» при каждом запуске ddms. Но это не проблема, потому что, если ddms не может связать 8700 с первой виртуальной машиной, он будет подключен к 8701, а затем к 8702 и т. Д.

case 2) Даже если вы установите для параметра «Базовый локальный порт отладчика» (в диалоговом окне предпочтений Eclipse ddms) значение 8600, вы можете увидеть ошибку - «В некоторых случаях не удается выполнить привязку к локальному 8700 для отладчика». Потому что, если ваше устройство имеет более или равно 100 виртуальных машин Dalvik, назначение портов каждой виртуальной машине, начиная с порта 8600, может достигать 8700 портов. Но никаких проблем не возникает, как в случае 1).

Итак, если вы действительно не хотите видеть ошибку, вам нужно установить «Базовый локальный порт отладчика» в диалоговом окне настроек Eclipse ddms на 8701 или выше.

Автономный монитор ddms или android использует файл настроек, отличный от Eclipse, поэтому он может не создавать подобных проблем.

~

1 голос
/ 05 апреля 2014

Я сделал это, перезагрузив компьютер

1 голос
/ 24 марта 2014

Эта проблема возникает при использовании другой виртуальной машины с тем же номером порта. Например, вы используете полный пакет Android SDk, который вы скачали с сайта разработчика Android. Теперь вы хотите использовать Eclipse и подключить ADT, SDK. Существует высокая вероятность возникновения ошибки такого типа. Это случилось со мной. Чтобы преодолеть эти трудности, вы можете сделать:
Window-Preferences-Android- Выберите DDMS- Изменить базовый порт локального отладчика (используйте 8601 вместо 8600).
Это может работать. Спасибо

1 голос
/ 29 октября 2011

Если бы та же проблема, другие номера портов в выводе консоли (где я запускаю ddms) привлекли мое внимание

Затем из документации я узнал, что 8600 является базовым портом по умолчаниючисло.Каждый новый процесс использует следующий доступный порт (8601,8602, ...).Кроме того, 8700 - это номер активного порта по умолчанию (с указанием выбранного в данный момент процесса в dbms)

Ниже приведены инструкции по отладке исходного кода Android + приложений

  1. Запуск эмулятора
  2. Запускать ddms
  3. Открыть Eclipse (Может возникнуть жалоба на невозможность подключения к 8600. Это потому, что когда Eclipse запускается и у вас есть плагин для Android, он загружает ddms. Поскольку у нас уже естьddms, подключенный к устройству, попытка подключения во второй раз не будет работать)
  4. В ddms выберите поток, который вы хотите отладить (когда вы выделите его, он покажет вам порты, которые ониспользуя, а также 8700 (например, «8649/8700»). Это означает, что вы можете использовать оба порта для подключения к этому процессу
  5. Из Eclipse, используя конфигурацию удаленной отладки, подключитесь к любому процессу, который вы хотите (самый простойчтобы выделить процесс изнутри ddms, а затем подключиться к 8700)
0 голосов
/ 11 июня 2018

Когда я выполняю монитор в $ ANDROID_HOME / tools / monitor в Ubuntu 16.04, он показывает

Не удалось открыть выбранный порт отладки виртуальной машины (8700). Убедитесь, что вы не есть другой экземпляр DDMS или работающий плагин eclipse. Если он используется чем-то другим, выберите новый номер порта в предпочтения.

Я пытался сделать следующее:

Под окном -> Настройки -> Android -> DDMS:

Установите базовый порт локального отладчика на «8601». Установите флажок «Использовать». ADBHOST "и значение должно быть 127.0.0.1

Но оно все равно появляется в диалоговом окне.

Тогда я сделал следующее:

gongzelong@gongzelong:~$ netstat -apn |grep 8700
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:8700          0.0.0.0:*               LISTEN      5044/java       
gongzelong@gongzelong:~$ kill -9 5044
gongzelong@gongzelong:~$ monitor

Сделав это, я решил свою проблему.

Не знаю почему, но у меня это работает.

...