2016-06-21 4 views
0

Я пытался запустить jdb, чтобы попытаться подключить его к процессу на моем устройстве Android.jdb дает java.net.SocketException: Connection reset

Команды, которые я пробовал следующим образом:

adb forward tcp:12345 jdwp:4127 

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345 

Мы можем предположить, что процесс с PID 4127 еще жив.

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

java.net.SocketException: Connection reset 

at java.net.SocketInputStream.read(SocketInputStream.java:209) 
at java.net.SocketInputStream.read(SocketInputStream.java:141) 
at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:130) 
at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232) 
at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116) 
at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90) 
at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519) 
at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328) 
at com.sun.tools.example.debug.tty.Env.init(Env.java:63) 
at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066) 

Я заметил странное поведение, что этот выход происходит только тогда, когда один из моих приложений работает. Может ли это быть связано с столкновением потоков или процессов или портов во время работы программы?

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

Set uncaught java.lang.Throwable 
Set deferred uncaught java.lang.Throwable 
Initializing jdb ... 
> Input stream closed. 

Я также попытался запустить командную строку в режиме администратора со следующими шагами:

netsh advfirewall set global StatefulFTP disable 
adb forward tcp:12345 jdwp:4127 
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345 

выход следующим образом:

java.io.IOException: handshake failed - connection prematurally closed 
     at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136) 
     at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232) 
     at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116) 
     at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90) 
     at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519) 
     at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328) 
     at com.sun.tools.example.debug.tty.Env.init(Env.java:63) 
     at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066) 

Fatal error: 
Unable to attach to target VM. 

ответ

0

проблема заключается в моем PROGR Я начинаю экземпляр моста отладки android. Когда моя программа пытается запустить jdb, возникает условие гонки для ADB. Поскольку моя программа уже создает экземпляр ADB до запуска jdb, jdb никогда не сможет успешно подключиться. Такой же результат дает даже запуск jdb через командную строку. Закрытие моей программы уничтожает экземпляр ADB, поэтому я могу запустить jdb через командную строку после закрытия моей программы.

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

0

Попробуйте отказаться от Android Studio.

Проблема в том, что Android Studio поддерживает работу ADB, что конфликтует с вашим. См. my answer к вашему аналогичному вопросу для более подробной информации.

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