I\'m trying to hook up jdb on my computer to a process (any process really) on my Android device, but it doesn\'t work at all.
So the commands I used are straight of
Try quitting Android Studio.
Its ADB is running even when your project is not. Here is an example where I quit Android Studio, ran ADB, launched my app within the device, then ran ADB again to see the new process id, forwarded the port and finally attached JDB:
$ adb -d jdwp
* daemon not running. starting it now at tcp:5037 *
* daemon started successfully *
28462
^C
$ 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 ...
>
You can also turn ADB on and off within Android Studio:
Android Studio->Tools->Android->Enable ADB Integration
When ADB integration is disabled, you can run ADB from the console as usual. You can also control and background ADB daemons with:
adb kill-server
adb start-server
I wasted a couple of hours on this, so it really needs better documentation. Also I would like to know how to run both the Android Studio debugger and JDB at the same time so that I can profile all method calls while stepping through the debugger (because the built-in Android Studio monitor tracing doesn't show consecutive method calls with arguments):
http://mybrainoncode.com/blog/2013/11/03/debugging-android-with-jdb/
https://teaspoon-consulting.com/articles/tracing-java-method-calls.html
You can try entering this command:
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=3456
Theoretically, you should get the following output:
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
>
However, I got the following:
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)
Does anyone know why this is happening?
Ok... The above problem has been resolved. This is due to a conflict between adb calls. There should only be 1 adb instance running at any point in time. This will occur when jdb tries to connect while adb is already running in your program. jdb will never be able to attach successfully in this state.
The TLDR version would be to just key in the command at the top of this answer and you will get the expected output.