SDK-Klassen in Eclipse debuggen

  • Antworten:7
Arthur
  • Forum-Beiträge: 4

05.01.2014, 01:11:08 via Website

Hallo!

Ich würde gerne die SDK-Klassen (in diesem Fall GridLayout) debuggen, was aber mehr schlecht als recht geht. Ich habe für meine App als minSdkVersion 14 und targetSdkVersion 19, teste aber auf meinem Gerät mit Android 4.1.2 (API 18). Das android.jar im Classpath ist Version 4.3. Als Source-Attachment habe ich 18 angehängt, da das ja beim Testen ausgeführt wird. Ich kann den Source Code auch öffnen, aber keine Breakpoints setzen. Wenn ich stattdessen aus meiner Klasse beim Debuggen in GridLayout reinsteppe, verhält sich das ganze seltsam. Teilweise werden Zeilen übersprungen und bestimmte innere Klassen gibt es angeblich nicht, wenn ich ein Inspect mache, etc. So als wäre ich doch in der falschen Version.

Kann mir jemand erklären wie ich richtig debugge? Danke schonmal! :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.01.2014, 09:44:12 via Website

Kann man SDK Klassen überhaupt debuggen?
Wieso brauchst du das Überhaupt?
Die GridLayout Klasse wird schon richtig geschrieben sein, wenn du ein Fehler Hast, dann erkläre ihn bitte genau.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Arthur
  • Forum-Beiträge: 4

05.01.2014, 11:39:51 via Website

Abgesehen davon, dass dein letzter Satz nicht richtig ist (es gibt praktisch keine fehlerfreie Software, schon gar nicht etwas so komplexes wie Android Views), möchte ich nicht primär Fehler im SDK finden, sondern verstehen, wann bestimmte Methoden vom System aufgerufen werden, in diesem Fall onMeasure im GridLayout.

Den Verdacht, dass man die SDK-Klassen nicht debuggen kann, habe ich so langsam auch. Ich kann z.B. im GridLayout-Code auch nicht per STRG+Klick zu Methoden springen etc. Allerdings habe ich sowas bisher noch nicht gehabt. Wenn Code da war, konnte ich immer debuggen.

Mein Problem etwas konkreter: Ich habe die Methode onMeasure in GridLayout überschrieben, um die Abmessungen der darin enthaltenen Views und die Anzahl der Spalten abhängig vom zur Verfügung stehenden Platz zu berechnen. Das funktioniert aber nicht, wenn die Views schon zum GridLayout hinzugefügt wurden, bevor onMeasure das erste Mal aufgerufen wird. In meinem Fall passiert das in onCreate der Activity. Dann gibt es eine IllegalArgumentException, wenn ich setColumnCount aufrufe ("rowCount must be greater than or equal to the maximum of all grid indices (and spans) defined in the LayoutParams of each child"). Wenn ich stattdessen in onCreate einen HTTP Request mache und erst bei Erhalten der Antwort die Views dem GridLayout hinzufüge, funktioniert es, da dann bei Aufruf von onMeasure scheinbar noch keine Views im GridLayout sind. Daher schätze ich, dass onMeasure ertsmals aufgerufen wird, wenn die Activity komplett erzeugt wurde (irgendwann nach onResume).
So denke ich mir das zumindest, und das würde ich gerne durch Debuggen untersuchen. Wenn jemand anderweitig helfen kann, gerne :). Wie man richtig debuggt, würde ich allerdings trotzdem gerne wissen.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.01.2014, 12:34:47 via Website

Ich nehme an, dass die android.jar absichtlich nicht im Debugmodus zur Verfügung gestellt wird. Vergleichen kann man das mit dlls in .net.
Man kann sie zwar in ein Projekt einbinden, aber auch nur debuggen wenn vom Entwickler gewollt. Wenn etwas bestimmtes aus den SDK Funktionen gesucht wird, dann kann man bei developer.android.com auf die Funktionen der Klassen schauen.
PS: Hier noch tipps zum debuggen : http://stackoverflow.com/questions/8551818/how-to-debug-android-application-line-by-line-using-eclipse

— geändert am 05.01.2014, 12:34:55

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Arthur
  • Forum-Beiträge: 4

05.01.2014, 18:41:09 via Website

Danke für den Link, aber den kenne ich schon und hilft leider nicht.

Antworten
Barbaric Chicken
  • Forum-Beiträge: 66

06.01.2014, 09:39:25 via Website

Hallo,

vielleicht hilft die Grafik weiter?
https://plus.google.com/+ArpitMathur/posts/cT1EuBbxEgN

Kannst du nicht alle wichtigen, bzw. interessanten Methoden, überschreiben und in deiner eigenen Klasse breakpoints setzen um dir die Reihenfolge anzuschauen?
Ich gehe davon aus, dass du eine Klasse von GridLayout extended hast?

Viele Grüße

Antworten
Arthur
  • Forum-Beiträge: 4

06.01.2014, 17:48:10 via Website

Die Grafik in Verbindung mit den Kommentaren darunter (nur überflogen) ist ganz gut, und so ähnlich habe ich es inzwischen (genauso wie du schreibst) auch rausgefunden. Letztendlich habe ich das Problem so gelöst, dass ich meinem GridLayout einen Listener (meine Activity) mitgebe. Das Listener-Interface wird in meiner GridLayout-Klasse definiert. Wenn onMeasure das erste Mal durchgelaufen ist, rufe ich die Interface-Methode auf und die Activity kann weitermachen.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.01.2014, 19:56:28 via Website

Gut das du das Jetzt Lösen konntest :)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten