DDMS to po prostu podgląd logu telefonu - w eclipse, wystarczy przełączyć się na perspektywę DDMS.
W tym logu oprócz różnych informacji lecą również błędy zgłaszane przez aplikację, w formie zrzutu stosu błędu. Dla przykładu mój własny babol:
android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84)
at pl.com.digita.BikeComputer.DatabaseAbstractionLayer.startRecording(DatabaseAbstractionLayer.java:229)
at pl.com.digita.BikeComputer.DatabaseAbstractionLayer.putLocation(DatabaseAbstractionLayer.java:242)
at pl.com.digita.BikeComputer.gpsService.GpsService.onLocationChanged(GpsService.java:276)
at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:191)
at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:124)
at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:140)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4914)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
W tekście szukamy rodzaju błędu i odwołania do kodu, który napisaliśmy sami, czyli w tym przypadku:
android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
...
at pl.com.digita.BikeComputer.DatabaseAbstractionLayer.startRecording(DatabaseAbstractionLayer.java:229)
at pl.com.digita.BikeComputer.DatabaseAbstractionLayer.putLocation(DatabaseAbstractionLayer.java:242)
at pl.com.digita.BikeComputer.gpsService.GpsService.onLocationChanged(GpsService.java:276)
Uzbrojeni w taką informację idziemy w do naszego kodu - tutaj DatabaseAbstractionLayer.java:229 i patrzymy dlaczego tak się dzieje (przy pewnej wprawie w 99% przypadków tyle wystarczy). Jeżeli nadal nic nie kumamy, ustawiamy sobie break point PRZED linią w której leci błąd i odpalamy debuger. Olewamy wątki, ale przyglądamy się krok po kroku poszczególnym obiektom i ich wartościom. Co ważne - w debugerze mamy kilka przycisków i w zależności od tego co klikniemy będziemy się zagłębiać w kod na różną głębokość.