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

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

我的问题是:两种选择的利弊。

谢谢

最佳答案

设备上的每个可调试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 docs中找到。只是过时了(出于某种原因,它以斜体表示),但基本细节没有改变。

关于android - 通过ADB的JDWP与通过DDMS的JDWP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19926972/

10-10 18:18