«Не удалось подключиться к удаленной виртуальной машине» при подключении jdb к эмулятору Android в Windows - PullRequest
11 голосов
/ 19 ноября 2010

Я пытался подключить JDB к эмулятору Android некоторое время, и меня неоднократно встречали с:

jdb -sourcepath ./src -attach localhost:8700

java.io.IOException: shmemBase_attach failed: The system cannot find the file specified
        at com.sun.tools.jdi.SharedMemoryTransportService.attach0(Native Method)
        at com.sun.tools.jdi.SharedMemoryTransportService.attach(SharedMemoryTransportService.java:90)
        at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98)
        at com.sun.tools.jdi.SharedMemoryAttachingConnector.attach(SharedMemoryAttachingConnector.java:45)
        at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358)
        at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168)
        at com.sun.tools.example.debug.tty.Env.init(Env.java:64)
        at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010)

Fatal error:
Unable to attach to target VM.

Не так здорово. Какой лучший способ обойти это? Я работаю на Windows 7 64bit.

Ответы [ 4 ]

14 голосов
/ 20 ноября 2010

В настоящее время это работает для меня - создание сокета, а не подключения к общей памяти.

> jdb –sourcepath. \ Src -connect com.sun.jdi.SocketAttach: имя хоста = localhost, порт = 8700

Заранее вам нужно выполнить некоторые настройки - например, посмотреть этот набор полезных подробностей о настройке отладчика без затмения . Он включает в себя хороший совет по настройке начальной точки останова - создайте или отредактируйте файл jdb.ini в вашем домашнем каталоге с таким содержимым, как:

stop at com.mine.of.package.some.AClassIn:14

и они будут загружены и отложены до соединения.

редактировать: забыл сослаться Страница Херонг Янга .

1 голос
/ 22 сентября 2017

Попробуйте выйти из Android Studio.

У меня была похожая проблема на Mac из-за того, что демон ADB уже запущен. После того, как вы закроете все работающие демоны, вы должны увидеть вывод, подобный следующему:

$ adb -d jdwp
28462
1939
^C
$ adb -d forward tcp:7777 jdwp:1939
$ jdb -attach localhost:7777 -sourcepath ./src
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> 

См. мой другой ответ на аналогичный вопрос для получения дополнительной информации и того, как запустить / остановить демон.

0 голосов
/ 10 апреля 2018

Для отладки приложения выполните следующие действия:

Откройте приложение на устройстве.

Найдите PID с помощью jdwp (убедитесь, что для 'android: debuggable' установлено значение true вманифест):

adb jdwp

Запустите JVM со следующими параметрами:

java -agentlib:jdwp=transport=dt_shmem,server=y,address=<port> <class>

Ожидаемый вывод для этой команды:

Listening for transport dt_shmem at address: <port>

Используйте jdb для присоединения приложения:

jdb -attach <port>

Если jdb успешно подключен, мы увидим jdb cli.

Пример:

> adb jdwp
  12300
> java -agentlib:jdwp=transport=dt_shmem,server=y,address=8700 com.app.app
  Listening for transport dt_shmem at address: 8700
> jdb -attach 8700
  main[1]
0 голосов
/ 19 ноября 2010

Ответ # 1: сопоставьте localhost в вашем файле hosts, как я упоминал ранее. Просто чтобы быть уверенным.

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

...