How to set breakpoint in nested class using JDB?

package com.android.internal.telephony.dataconnection;

public abstract class DcTrackerBase extends Handler {
    protected BroadcastReceiver mIntentReceiver = new BroadcastReceiver ()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            String action = intent.getAction();
            if (DBG) log("onReceive: action=" + action);
[...]

In the above code, using jdb, I would like to set a breakpoint in the method onReceive. I used the following command:

> stop in com.android.internal.telephony.dataconnection.DcTrackerBase$mIntentReceiver.onReceive

And I get this from jdb:

> Deferring breakpoint com.android.internal.telephony.dataconnection.DcTrackerBase$mIntentReceiver.onReceive.
It will be set after the class is loaded.

I know the class is already loaded, so I assume jdb does not find the method that I want. How do I set a breakpoint?

+4
source share
2 answers

Invalid method name.

In JDB, run this command to verify the class DcTrackerBase:

> class com.android.internal.telephony.dataconnection.DcTrackerBase
Class: com.android.internal.telephony.dataconnection.DcTrackerBase
extends: android.os.Handler
subclass: com.android.internal.telephony.dataconnection.DcTracker
nested: com.android.internal.telephony.dataconnection.DcTrackerBase$1

As we can see, a nested class DcTrackerBase$1can be our class BroadcastReceiver. To verify, run the following command:

> class com.android.internal.telephony.dataconnection.DcTrackerBase$1
Class: com.android.internal.telephony.dataconnection.DcTrackerBase$1
extends: android.content.BroadcastReceiver

! , :

> stop in com.android.internal.telephony.dataconnection.DcTrackerBase$1.onReceive
Set breakpoint com.android.internal.telephony.dataconnection.DcTrackerBase$1.onReceive
+5

, onReceive, . DcTrackerBase $() , / DcTrackerBase.java. .

public class DebugFun{

    public static void main(String[] args){
        Object myObj = new Object(){

            public String toString(){
                int x = 1;
                x++;
                return "X is:"+x;               
            }
        };
        System.out.println(myObj);

    }


}

jdb DebugFun

, :

stop in DebugFun$1.toString
run 

.

0

All Articles