有没有一种方法可以使用GCM在接收推送通知时调试应用程序?

16

我的应用程序最初是关闭的,当我从GCM推送服务接收到新消息时,我从扩展GCMIntentService的类中的onMessage()开始一个新的活动。我想使用调试器检查一些错误。我的问题是,在从推送通知启动应用程序时,是否有一种方法可以调试应用程序?

为了更清楚地说明,我有一个与之相关联的BroadcastReceiver和服务。 即使应用程序关闭,它也会接收广播并根据接收到的消息启动活动。 有可能在应用程序未打开时接收到广播。现在,当应用程序打开并且我收到推送消息时,我可以对其进行调试。但问题是,当应用程序关闭并且它接收到广播时,如何调试它?


3
你无法使用设置断点并将其后台运行的调试模式启动应用程序,这是有原因的吗?据我所知,你不能像现在这样随时连接调试器。 - user908627
感谢您的评论@Neiti01。我不明白您所说的“背景是什么意思”。我能够从eclipse以调试模式启动我的应用程序并设置断点。问题是,如果我从设备退出应用程序,则调试会停止(这是预期的)。现在我有一个BroadCastReceiver和一个附加到它的服务。即使应用程序关闭,它也会接收广播并启动活动。 - Shobhit Puri
1
“将其放到后台”指的是只需按下主页按钮。这不应该停止进程,它仍然应该在运行,并且调试器仍然应该连接,并且您BroadcastReceiver中的断点将会触发。 - user908627
哦,是的,我同意。在这种情况下,如果应用程序在后台运行,我的推送功能就可以正常工作。我也能够调试这种情况。但是当应用程序关闭时,它的行为就不像以前那样了。这就是为什么我问这个问题的原因 :) - Shobhit Puri
2
我这里也遇到了同样的问题。你找到了一种方法可以在从接收GCM后调用通知时调试应用程序吗? - jsidera
显示剩余2条评论
1个回答

25
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
    /*
      the following line will halt the app here
      to give you time to attach the debugger
    */
    android.os.Debug.waitForDebugger();

    /*
      then you can put a breakpoint on any line
      after that, like here:
    */
    Log.d("onMessageReceived", "From: " + remoteMessage.getFrom());

    ...
}

您可以在代码的任何位置放置行 android.os.Debug.waitForDebugger();,以停止执行并附加调试器。只要记得在完成调试后将其删除即可。


6
2020年7月仍然完美运行!我建议始终在“if (BuildConfig.DEBUG)”中包装以确保安全。 - paul_f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接