Beachten Sie, dass es zwei Möglichkeiten zum Erstellen einer Debugging-Sitzung (siehe die jdb-Dokumentation ).
- Anbringen von - Wir laden das Programm in eine virtuelle Maschine, es hört auf einem Port (z.B. 8000) auf. Dann laden wir in einer anderen Terminalsitzung jdb und verbinden es mit der JVM-Sitzung, indem wir den Port angeben.
- in einer Terminsitzung:
java -Xdebug -agentlib:jdwp=transport=dt_socket, address=8000,server=y,suspend=y ClassName
- in einer zweiten Terminalsitzung:
jdb -attach 8000
- Start von - Laden Sie jdb und teilen Sie ihm den Namen der zu ladenden Klasse mit.
- in einer einzigen Terminalsitzung:
jdb ClassName
Wenn Sie befestigen. dann brauchen Sie nicht die run
Befehl.
Wenn Sie jedoch Starten dann können Sie hacer müssen die run
(die virtuelle Maschine ist noch nicht gestartet worden).
Dieses Verhalten lässt sich ableiten aus man jdb
:
laufen. - Nach dem Start jdb
und setzen Sie alle notwendigen Haltepunkte, verwenden Sie diesen um die Ausführung der fehlerbereinigten Anwendung zu starten. Diese ist nur verfügbar, wenn jdb
startet die fehlerbereinigte Anwendung (im Gegensatz zum Anhängen an eine bestehende VM) .
Aus diesem Grund erhalten Sie die Fehlermeldung. Sie gestartet den Debugger, benutzte aber nicht die run command
. Einige Anleitungen sagen Ihnen fälschlicherweise, dass Sie Start jdb, vergessen aber, Ihnen mitzuteilen, dass Sie die run
Befehl.
Im Folgenden wird gezeigt, wie man die Liste der Methoden erhält (vorausgesetzt, man hat main
Methode in einer Klasse namens ClassName
).
-
Anbringen von :
jdb -attach 8000
main[1] stop in ClassName.main
main[1] cont
main[1] methods ClassName
-
Start von :
jdb ClassName
> stop in ClassName.main
> run
main[1] methods ClassName
Hinweis : Sehen Sie sich die Eingabeaufforderung von jdb an. Manchmal ist es >
manchmal ist es wie main[1]
. Wenn es >
dann ist die VM noch nicht gestartet und Befehle wie classes
, methods
funktioniert erst dann, wenn Sie die run
Befehl. Wenn die Eingabeaufforderung lautet main[1]
ist die VM gestartet und die gewünschten Befehle funktionieren.
Das einzige, was ich daraus schließen kann, ist, dass jdb erwartet, dass Sie Ihre Haltepunkte blind setzen
Es ist schwierig, Unterbrechungen allein mit dem Debugger zu setzen. Sie müssen sich Ihren Quellcode an anderer Stelle ansehen. Wahrscheinlich kennen Sie den Namen mindestens einer Methode, bei der Sie einen Breakpoint setzen wollen, und setzen daher einen ersten Breakpoint mit stop in ClassName.MethodName
. Wenn Sie nicht wissen, wo Sie unterbrechen sollen, können Sie immer einen Haltepunkt in Ihrer Hauptmethode setzen, indem Sie stop in ClassName.Main
. Denken Sie daran, dass Sie bei laufendem Debugger weitere Haltepunkte setzen können. Sie können auch feststellen, dass die list
Befehl nützlich - er zeigt den Quellcode an, der dem aktuellen Haltepunkttreffer entspricht.