10 Stimmen

Fehlersuche in der Android-Anwendung mit "jdb -attach" (oder jswat)

Ich habe Probleme mit der Verwendung eines eigenständigen Java-Debugger mit Android-Anwendungen auf Emulator. Offenbar könnte jeder Remote-fähigen Java-Debugger wie jdb (oder jswat) genutzt werden, indem Sie die Schritte unten (wie ich nach dem Lesen hier und dort verstehen):

1) Schalten Sie den Emulator ein, installieren Sie Ihre Anwendung auf dem Emulator (adb install)

2) Schalten Sie den Dalvik-Server (ddms) ein.

3) Starten Sie auf dem Emulator die Anwendung "DevTools" --> "Entwicklungseinstellungen" --> wählen Sie die Anwendung, die Sie debuggen möchten, und aktivieren Sie die Option "Auf Debugger warten".

4) Starten Sie Ihre Anwendung erneut im Emulator; sie wird blockiert, während sie auf einen Debugger wartet, und Dalvik zeigt einen neuen Prozess an, der durch einen "roten Fehler" gekennzeichnet ist

5) wählen Sie unter dalvik den rot markierten Prozess aus; sein Debug-Port wird somit an localhost:8700 weitergeleitet

6) Verbinden Sie den Debugger mit localhost:8700. Mit jdb müssen Sie "jdb -attach 8700" ausführen.

Sobald der Debugger gestartet wird, wird Ihre Anwendung auf dem Emulator entsperrt. Es scheint also, dass die App einen Debugger richtig erkannt hat und somit frei läuft.

Der springende Punkt ist jedoch, dass er "frei läuft", d. h. er wartet nicht darauf, dass der Debugger einen "run"-Befehl ausgibt. Ich habe also keine Möglichkeit, Haltepunkte einzurichten.

Nach Hinweisen von 1 Ich habe versucht, Warteschleifen an den Anfang meiner Anwendung zu setzen, in der Hoffnung, dass ich die Zeit haben würde, einen Haltepunkt zu setzen. Wenn ich versuche, einen Haltepunkt zu setzen, sagt jdb "Deferring breakpoint XXX.YYY. Er wird gesetzt, nachdem die Klasse geladen wurde", da die Anwendung noch nicht läuft. Wenn ich dann aber einen "run"-Befehl gebe, lautet die Antwort "Nothing suspended.", da die Anwendung bereits läuft (und das tut sie auch).

Mit jswat sehen Sie all diese Meldungen nicht, aber das Endergebnis ist das gleiche :-(

Unnötig zu erwähnen, dass "jdb -attach" mit nicht-Android-Java-Anwendungen, die auf localhost laufen, problemlos funktioniert.

Irgendwelche Tipps (außer "bitte Eclipse verwenden")?

Habe ich irgendwo ein blödes Detail übersehen?

Die Anwendung ist eine HelloWorld, der Build-Befehl lautet "ant debug".

Ich danke Ihnen im Voraus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X