2

Android のドキュメントによると、各 DVM には接続する JDWP ポートがあります (正確には JDWP プロトコルではありませんが、ほとんどの JDWP 機能を実装しています)。したがって、ADB を使用してアタッチできます。

また、同じドキュメントによると、DDMS は DVM ごとに 1 つの JDWP と 1 つの JDWP ベース ポート (8700) を提供します。

私の質問は次のとおりです。両方のオプションの長所と短所。

ありがとう

4

1 に答える 1

9

デバイス上のすべてのデバッグ可能な VM には、ADB への接続があります。DDMS は ADB と通信して VM のリストを取得し、ADB を使用して VM と通信します。

DDMS は VM ごとに個別の TCP ポートでリッスンするため、デバイス上の任意の VM に「直接」接続できます。さらに、便宜上、ポート 8700 でリッスンし、UI で現在選択されている VM に接続をルーティングします。Eclipse、IntelliJ、jdb、jswatなどで「デバッグリモートVM」を使用してそのポートに接続できます。

接続されると、JDWP プロトコルは、通信に使用される基本的なパケット形式 (つまり、パケットの種類と長さのエンコード方法) を定義します。DDMS は JDWP を拡張し、その目的のために新しいパケット形式を定義します。DDMS メッセージとデバッガー メッセージはインターリーブできます。

ここには 2 つのオプションはありません。デバッガーは DDMS と通信し、DDMS は ADB と通信し、ADB は VM と通信します。デバッガーと VM は JDWP を話し、DDMS はそれを少し拡張して、同じ通信チャネルを共有できるようにします。

元の DDMS 設計ドキュメントは、dalvik docsにあります。少し古くなっています (そして、何らかの理由でイタリック体でフォーマットされています) が、本質的な詳細は変更されていません。

于 2013-11-12T15:49:08.183 に答える