为什么要等待调试器然后附加调试器来处理?

Y.S*_*Y.S 5 android android-service android-testing android-debug android-developer-api

有什么意义

android.os.Debug.waitForDebugger();
Run Code Online (Sandbox Code Playgroud)

我知道我们 [有时] 需要使用此函数来调试 a Service,但我的问题是:

  • 为什么我们必须这样做?
  • 为什么存在这种方法?它还有什么其他用途?
  • 将调试器附加到进程是什么意思,为什么我们必须这样做?为什么 aService必须以这种方式调试,而不是 an Activityor BroadcastReceiver

有人会认为在项目中调试任何类型的代码都很简单。除了它不是。Service反正不是为了。

这个特殊程序存在的原因是什么?它还有什么用途?

在此处输入图片说明

等待调试器连接。一旦调试器附加,它就会返回,所以如果你想立即开始跟踪,你需要在 waitForDebugger() 调用之后放置一个断点。

为什么仍然没有答案。

更新

我发现了此功能的一个用例:当应用程序进程终止后自动重启 Android 应用程序时。当用户在应用程序设置中切换运行时权限时,该进程将被终止。更一般地说,一个应用程序进程被杀死并重新启动,只要...

android.os.Process.killProcess(android.os.Process.myPid());
Run Code Online (Sandbox Code Playgroud)

叫做。

要在进程重新启动后调试应用程序,请编写android.os.Debug.waitForDebugger()代码,然后将调试器附加到当前进程。

Android:如何调试应用程序的启动过程

这是此功能的一个用例。

参考资料

调试服务

在 Android Studio 中调试服务的正确方法?.

服务中的断点不起作用

如何调试 Android 后台服务?.

如何调试服务?.

如何附加调试器从第一行开始处理,而无需每次都编译代码

您可以在应用程序打开后附加调试器

可能相关

每次调试运行时禁用辅助功能服务

在 Intellij 中使用 Java 调试器时,“丢帧”是什么意思?

配置设备上的开发人员选项

测试您的服务

强制应用程序从第一个 Activity 重新启动

Gen*_*mes 6

我不确定我的答案是否正确,因为你可能会期待里面有复杂的见解。实际上,有一个非常简单的过程来连接和拦截过程响应。

在此输入图像描述

  • 为什么会有这个方法存在?它还有什么其他目的?

如您所见,回答这个问题非常简单。由于进程拦截期间的竞争条件,您将无法在早期断点处停止,并且应该调用waitForDebugger(). 在最常见的地方,例如Service调试和Application.

  • “将调试器附加到进程”是什么意思,为什么我们必须这样做?为什么必须以这种方式调试 Service,而不是 Activity 或 BroadcastReceiver?

这是另一个问题,我不确定这里的上下文,但是。我们需要调用该方法,并在使用清单中的Service另一个进程的情况下手动附加到进程。显然,调试桥将在应用程序的当前活动进程上设置,但由于我们可以Service从另一个进程运行,因此我们需要手动将其添加到调试桥并等待调试连接。


归档时间:

查看次数:

2181 次

最近记录:

6 年,1 月 前