2010-11-18 9 views
10

Próbowałem połączyć JDB do android emulator na chwilę i zostały wielokrotnie spotkała się z:„Nie udało się dołączyć do zdalnego VM” łączący JDB do android emulatora 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. 

Nie tak świetnie. Jaki jest najlepszy sposób na obejście tego? Używam systemu Windows 7 64bit.

+0

Czy można połączyć się za pomocą debuggera? [Sprawdź moją odpowiedź tutaj] (http://stackoverflow.com/questions/4199323/android-app-not-launching-on-emulator/4199575#4199575) –

+0

Hm, wygląda jak wpisy w moim pliku hosts są wszystkie skomentowane out, mówiąc: # localhost name resolution jest obsługiwane w samym DNS. # \t 127.0.0.1 localhost # \t :: 1 localhost –

+2

Znaleziono * an * odpowiedź. Z niektórych Googling wydaje się, że jdb w Windows domyślnie łączy się z pamięcią wspólną ze zdalną maszyną wirtualną (http://www.herongyang.com/jtool/jdb_3.html). Okazuje się, możemy określić inny typ połączenia: > JDB -connect com.sun.jdi.SocketAttach: hostname = localhost, port = 8700 Ustaw nieprzechwycony java.lang.Throwable Set odroczony nieprzechwycony java.lang.Throwable Inicjowanie jdb ... > Wygląda na to, że się łączy. –

Odpowiedz

11

Obecnie działa to dla mnie - tworzenie gniazda, a nie wspólne połączenie pamięci.

> JDB -sourcepath \ src -connect com.sun.jdi.SocketAttach: hostname = localhost, port = 8700

Wcześniej trzeba zrobić jakąś konfigurację - na przykład zobaczyć ten zestaw useful details on setting up a non-eclipse debugger.. Obejmuje ona dobra wskazówka do ustawienia początkowego przerwania - tworzyć lub edytować plik jdb.ini w swoim katalogu domowym, o zawartości takich jak:

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

i będą ładowane i odroczone do czasu połączenia.

edytuj: zapomniałem odwołać Herong Yang's page.

+0

+1 za link do pomocy ze strony Heronga! –

+0

Jakieś wyjaśnienie sprawy w dół? –

0

Odpowiedź # 1: Mapuj localhost w pliku hosts, tak jak to zrobiłem wcześniej. Tak dla pewności.

Odpowiedź # 2: Jeśli korzystasz z pamięci współdzielonej, rozmiar bitowy może łatwo stać się problemem. Wprowadź na pewno wszędzie używasz tej samej szerokości słowa.

+0

Dzięki Mark - nie używam jawnie pamięci współdzielonej - przynajmniej myślę, że muszę się dowiedzieć, co używa emulator Androida, jeśli dobrze rozumiem. Fakt, że mogę się połączyć z gniazdem, sugeruje, że tak nie jest. –

0

Spróbuj zakończyć pracę z Androidem Studio.

Miałem podobny problem na komputerze Mac z powodu już uruchomionego demona ADB. Po zamknięciu wszystkie uruchomione demony, powinieneś zobaczyć wynik podobny do następującego:

$ 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 ... 
> 

Zobacz my other answer z podobnym pytaniem na więcej szczegółów i jak rozpocząć/zatrzymać demona.

Powiązane problemy