2

根据 Android 文档,每个 DVM 都有一个要附加的 JDWP 端口(不完全是 JDWP 协议,但实现了大部分 JDWP 功能)。因此,您可以使用 ADB 附加到它。

并且根据相同的文档,DDMS 为每个 DVM 提供一个 JDWP 和一个 JDWP 基本端口 (8700)。

我的问题是:两种选择的优缺点。

谢谢

4

1 回答 1

9

设备上的每个可调试 VM 都与 ADB 连接。DDMS 与 ADB 对话以获取 VM 列表,然后使用 ADB 与它们对话。

DDMS 侦听每个 VM 的单独 TCP 端口,因此您可以“直接”连接到设备上的任何 VM。此外,为了方便起见,它侦听端口 8700,并将那里的任何连接路由到当前在 UI 中选择的任何 VM。您可以使用 Eclipse、IntelliJ、jdb、jswat 等使用“调试远程 VM”连接到该端口。

连接后,JDWP 协议定义了用于通信的基本数据包格式(即数据包类型和长度如何编码)。DDMS 扩展了 JDWP,为其目的定义了一种新的数据包格式。DDMS 消息和调试器消息可以交错。

这里真的没有两个选择。调试器与 DDMS 对话,DDMS 与 ADB 对话,ADB 与 VM 对话。调试器和 VM 使用 JDWP,而 DDMS 对其进行了扩展,因此它可以共享相同的通信通道。

原始的 DDMS 设计文档可以在dalvik 文档中找到。它有点过时了(并且,出于某种原因,用斜体格式化),但基本细节没有改变。

于 2013-11-12T15:49:08.183 回答