我正在尝试使用Eclipse按照以下指令调试android源:
http://source.android.com/using-eclipse
我已下载了源代码,并将其构建完成。我按照上面链接中的说明进行操作,一切正常,直到我运行ddms命令。此时,如果Eclipse正在运行,我会收到错误“无法打开所选VM调试端口(8700)”。如果我关闭Eclipse,那么ddms运行没有问题,我可以在模拟器上运行。但是,如果我现在打开Eclipse,我会得到同样的错误。
无论如何,无论我做什么,如果我尝试进行远程调试,它总是会因“无法连接到远程VM”而失败。
有什么想法吗?
由于
答案 0 :(得分:19)
看起来你有两个问题:
您正在尝试运行DDMS两次。您不需要运行DDMS的独立版本,因为它的版本已集成在Eclipse中作为Android插件的一部分。如果您在Eclipse中更改为DDMS透视图,我相信您会发现所有相同的功能都可用。
您尚未告知DDMS要在localhost:8700上调试哪个VM。在尝试建立远程调试连接之前,必须转到DDMS透视图并单击system_process(或您要调试的任何进程)。
答案 1 :(得分:16)
混乱的Windows主机文件位于C:\WINDOWS\system32\drivers\etc
,它应包含以下行:
127.0.0.1 localhost
如果这不起作用,请尝试在Eclipse中进行以下更改。
在窗口下 - >偏好 - > Android - > DDMS:
127.0.0.1
答案 2 :(得分:7)
我通过任务管理器结束进程“adb.exe”然后通过Windows重新加载SDK解决了这个问题 - > Preference ..我在Win 7 64位上运行Eclipse Indigo。
答案 3 :(得分:4)
我也遇到了这个问题(Windows 7),即使我的/ Windows / system32 / drivers / etc / hosts文件中已经有127.0.0.1 localhost
。
我尝试更改ADBHOST信息& eclipse首选项中的端口,但是没有做任何事情。
netstat -b
显示'127.0.0.1'作为adb和模拟器的源地址,但始终将我的机器主机名列为'外地地址'。在预感中,我尝试使用我的机器未连接进行调试到任何网络(没有WiFi,没有插入任何网络)......它工作正常! (DDMS能够连接到模拟设备上的VM,我能够调试得很好。)
我认为DDMS& /或adb发送的邮件不会留在我的本地计算机上(它们会被发送到我的本地路由器)。 (这只是一个猜测;我不知道如何最终测试它。)IOW,loopback无法正常工作。
由于我的localhosts中已经有127.0.0.1,我将机器的本地子网地址添加到我的hosts文件中,猜测DDMS / adb可能正在使用该地址(对比127.0.0.1)。这似乎解决了我的问题。
所以现在我的hosts文件有这些行:
127.0.0.1 localhost ::1 localhost 192.168.1.102 localhost
(我的机器的本地IPv4地址是 192.168.1.102 。您可以使用ipconfig
命令查看您的。)
(我遇到过一些网页,介绍如何设置一个处理环回的Windows的虚拟网络适配器,例如Setting up a Microsoft Loopback Adapater (from Oracle Distilled),但没有时间接受它,看看这是否是一个可行的解决方案这也是。)
答案 4 :(得分:4)
我通过打开Windows任务管理器并关闭进程“adb.exe”解决了这个问题。然后关闭eclipse并重新打开它。它会正常启动而不会出现任何错误。
答案 5 :(得分:2)
这是供参考。但我想这可能与你的情况相符。
端口8700是ddms非常特殊的端口;没有办法改变端口。 端口8700用于聚合来自每个Dalvik VM的数据包。
将有两个案例;
情况1)如果将“基本本地调试器端口”(在Eclipse ddms首选项对话框中)设置为8700,那么每次启动ddms时,您都会看到错误 - “无法绑定到本地8700 for debugger”。但没问题,因为如果ddms无法将8700绑定到第一个VM,那么将连接到8701,然后连接到8702等等。
情况2)即使将“基本本地调试器端口”(在Eclipse ddms首选项对话框中)设置为8600,在某些情况下,您可能会看到错误 - “无法绑定到本地8700 for debugger”。因为,如果您的设备具有多于或等于100个dalvik VM,则从端口8600开始分配给每个VM的端口可能会达到8700端口。但是,没有问题与案例1)相同。
因此,如果您真的不想看错误,则必须将Eclipse ddms首选项对话框中的“基本本地调试器端口”设置为8701或更高版本。
独立的ddms或android监视器使用Eclipse中的不同设置文件,因此它可能不会出现这种问题。
〜
答案 6 :(得分:1)
出现同样的问题,控制台输出中的不同端口号(我启动ddms)引起了我的注意
然后从documentation,我了解到8600是默认的基本端口号。每个新进程都使用下一个可用端口(8601,8602,...)。此外,8700是默认的活动端口号(表示当前在dbms中选择的进程)
以下是调试Android源代码+应用程序的步骤
答案 7 :(得分:1)
当您使用具有相同端口号的其他VM时,会出现此类型问题。例如,您使用的是从Android开发者网站下载的Android SDk完整捆绑包。现在你想使用Eclipse并插入ADT,SDK。发生此类错误的可能性很高。它发生在我身上。要克服这些困难,你可以这样做:
Window-Preferences-Android-选择DDMS-更改基本本地调试器端口(使用8601而不是8600)。
它可以工作。感谢
答案 8 :(得分:1)
我是通过重新启动计算机来完成的
答案 9 :(得分:0)
为了完整性:(在win 7 / Vista上)不仅你必须确定行
127.0.0.1 localhost
出现在
中C:\WINDOWS\system32\drivers\etc
您还需要注释从127.0.0.1解析的所有其他本地虚拟主机。如果您正在同一台计算机上开发Web内容并在之前将其设置为循环回本地的不同主机名,则很可能就是这种情况。
答案 10 :(得分:0)
我通过关闭android工作室解决了这个问题所以eclipse可以获得ddms
答案 11 :(得分:0)
当我在Ubuntu 16.04上的$ ANDROID_HOME / tools / monitor中执行monitor时,显示
无法打开选定的VM调试端口(8700)。确保你没有 有另一个DDMS实例或运行eclipse插件。如果 它被其他东西使用,在中选择一个新的端口号 偏好。
我尝试执行以下操作:
在窗口下 - >偏好 - > Android - > DDMS:
将Base local debugger port设置为“8601”选中“Use”框 ADBHOST“和值应为127.0.0.1
但它仍会弹出对话框。
然后我做了以下事情:
gongzelong@gongzelong:~$ netstat -apn |grep 8700
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:8700 0.0.0.0:* LISTEN 5044/java
gongzelong@gongzelong:~$ kill -9 5044
gongzelong@gongzelong:~$ monitor
通过这样做,它解决了我的问题。
不知道为什么,但它对我有用。