5
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);
[...]

在上面的代码中jdb,我想在onReceive方法上设置一个断点。我使用了以下命令:

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

我从jdb

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

我知道该类已经加载,所以我想 jdb 没有找到我想要的方法。那我应该如何设置断点?

4

2 回答 2

6

争吵的方法名称是错误的。

在 JDB 中,发出以下命令来检查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

正如我们所看到的,嵌套类DcTrackerBase$1可能是我们的BroadcastReceiver类。要验证,请发出以下命令:

> 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
于 2014-11-20T19:54:02.797 回答
0

当您像上面的代码一样覆盖 onReceive 时,您正在创建一个匿名类。这应该创建一个名称格式为 DcTrackerBase$(a number) 的类,具体取决于您在 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 

现在调试器在内部类中。

于 2014-11-20T19:59:40.507 回答