'jdb' - The Java Debugger
Part:
1
2
3
4
5
6
7
8
9
(Continued from previous part...)
The target application is launched in "shared memory server" mode.
Its execution is suspended. Now open another command window and run:
>jdb -attach MyHello
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
>
VM Started: No frames on the current call stack
main[1] stop in Hello.main
Deferring breakpoint Hello.main.
It will be set after the class is loaded.
main[1] cont
> Set deferred breakpoint Hello.main
Breakpoint hit: "thread=main", Hello.main(), line=3 bci=0
3 System.out.println("Hello world!");
main[1] list
1 public class Hello {
2 public static void main(String[] a) {
3 => System.out.println("Hello world!");
4 }
5 }
main[1] cont
>
The application exited
As you can see, the debugger successfully connected to the target application.
I used "next" command to let the target application to execute the current statement.
Let's try option #3 first. Open a command window on a windows system and run:
>java -agentlib:jdwp=transport=dt_socket,address=localhost:8888,server=y,
suspend=y Hello
Listening for transport dt_socket at address: 8888
The target application is launched in "socket server" mode.
Its execution is suspended. Now open another command window and run:
>jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8888
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
>
VM Started: No frames on the current call stack
main[1] stop in Hello.main
Deferring breakpoint Hello.main.
It will be set after the class is loaded.
main[1] cont
> Set deferred breakpoint Hello.main
Breakpoint hit: "thread=main", Hello.main(), line=3 bci=0
3 System.out.println("Hello world!");
main[1] quite
Cool. I know how to run "jdb" to debug an application running on a remote machine now!
However, the command suggested in the JPDA documentation did not work:
>jdb -attach localhost:8888
java.io.IOException: shmemBase_attach failed: The system cannot find
the file specified
at com.sun.tools.jdi.SharedMemoryTransportService.attach0(...
...
My guess is that the Windows version of "jdb" assumes "shared memory" as the default
transport mode.
(Continued on next part...)
Part:
1
2
3
4
5
6
7
8
9
|