"Не удалось подключиться к удаленной виртуальной машине", подключив jdb к эмулятору Android в Windows

Я пытался подключить 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.

Ответ 1

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

> jdb -sourcepath.\src -connect com.sun.jdi.SocketAttach: hostname = localhost, порт = 8700

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

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

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

edit: забыли ссылаться на страница Herong Yang.

Ответ 2

Ответ №1: Сопоставьте локальный хост в файле хостов, как я связал ранее. Просто, чтобы быть уверенным.

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

Ответ 3

Попробуйте выйти из 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 ...
> 

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