2010-11-18 1 views
10

Я пытался подключиться к JDB андроид эмулятор на некоторое время, и были неоднократно встречались с:«Не удалось подключиться к удаленному VM» подключения к JDB андроид эмулятор на Windows,

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.

+0

Можете ли вы подключиться через отладчик? [Отметьте мой ответ здесь] (http://stackoverflow.com/questions/4199323/android-app-not-launching-on-emulator/4199575#4199575) –

+0

Хм, похоже, что записи в файле моих хостов прокомментированы , говоря: # localhost name resolution обрабатывается в самом DNS. # \t 127.0.0.1 localhost # \t :: 1 localhost –

+2

Найдено * a * ответ. Из некоторого Googling кажется, что jdb в Windows по умолчанию использует соединение с общей памятью с удаленной виртуальной машиной (http://www.herongyang.com/jtool/jdb_3.html). Оказывается, мы можем указать другой тип подключения: > JDB -connect com.sun.jdi.SocketAttach: имя хоста = локальный, порт = 8700 Набор неперехваченное java.lang.Throwable Set отложенное неперехваченное java.lang.Throwable Инициализация jdb ... > Это похоже на подключение, по крайней мере. –

ответ

11

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

> JDB -sourcepath \ SRC -connect com.sun.jdi.SocketAttach: имя хоста = локальный порт = 8700

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

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

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

Редактировать: забыл указать Herong Yang's page.

+0

+1 для связи с помощью страницы Геронга! –

+0

Любое объяснение для downvote? –

0

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

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

+0

Спасибо, Марк - я не использую общую память - по крайней мере, мне кажется, мне нужно выяснить, что использует эмулятор Android, если я правильно понимаю. Тот факт, что я могу подключиться к сокетному соединению, говорит о том, что это не так. –

0

Попробуйте отказаться от 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 ... 
> 

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

 Смежные вопросы

  • Нет связанных вопросов^_^