当应用程序被杀死时如何进行调试

9
我的应用在某些活动中有缺陷:当它重新启动时(当使用多任务处理器杀掉后再次打开),它会崩溃。我认为这与我的单例有关,但我不确定。我想找出问题所在,但由于调试器在我杀死应用程序时停止工作(我正在使用 adb shell am kill <package-name>),所以我无法进行调试。
有人知道我怎样才能解决这个问题吗?(或者至少能给我一些提示吗)
3个回答

12

您可以将以下代码添加到主活动的onCreate()方法中:

android.os.Debug.waitForDebugger();

这将暂停您的应用程序,直到调试器连接到进程。

然后:

  • 运行您的应用程序
  • 将您的应用程序放到后台(例如使用主页按钮)
  • 杀死进程或使用像MemoryPump这样的应用程序填充RAM并使Android杀死您的应用程序
  • 使用多任务面板切换回您的应用程序(该应用程序将启动并等待调试器)
  • 将Android Studio调试器附加到您的应用程序(在Android Studio工具栏中“运行应用程序”图标和“停止应用程序”图标之间的某个位置)
  • 调试您的应用程序

3
我会使用DDMS(Dalvik Debug Monitor Server)在关闭并重新启动我们的应用程序后捕获堆栈跟踪等信息。
(FYI:它已经与其余的Android工具集一起安装了)
虽然它不能让你通过VS / XS调试你的应用程序,但它可以帮助你确定导致问题的应用程序区域。从那里开始,在麻烦区域周围添加日志记录(即老式的printf样式调试)。

enter image description here

http://developer.android.com/tools/debugging/ddms.html

从Visual Studio启动:

enter image description here

来自 Xamarin Studio:

enter image description here


好的,我会尝试一下。顺便说一句,我刚刚发现你可以通过点击这个按钮从Visual Studio打开DDMS。 - Frederick Eskens
@FrederickEskens 谢谢,我已经将该链接添加到答案中,并说明了如何从Xamarin Studio启动。 - SushiHangover
另外注意:确保你以管理员身份运行VS/XS。这个问题让我花了太长时间才解决。 - Frederick Eskens

1
如果您使用单例类来预加载一些数据,则在关闭应用程序时实例将被销毁,因此您需要重新加载单例所需的数据。
您还可以添加Raygun,它将捕获所有异常并将其发送到服务器,在那里您将能够查看异常详细信息。
您可以从nuget获取它: Mindscape.Raygun4Net 5.3.0

我假设单例模式为空,所以在onCreateonResume中放置了if语句进行检查。如果它为空,应该返回到主活动。但仍然崩溃了。 - Frederick Eskens

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