无法打开选定的VM调试端口(8700)

时间:2010-05-10 04:53:39

标签: android eclipse remote-debugging

我正在尝试使用Eclipse按照以下指令调试android源:

http://source.android.com/using-eclipse

我已下载了源代码,并将其构建完成。我按照上面链接中的说明进行操作,一切正常,直到我运行ddms命令。此时,如果Eclipse正在运行,我会收到错误“无法打开所选VM调试端口(8700)”。如果我关闭Eclipse,那么ddms运行没有问题,我可以在模拟器上运行。但是,如果我现在打开Eclipse,我会得到同样的错误。

无论如何,无论我做什么,如果我尝试进行远程调试,它总是会因“无法连接到远程VM”而失败。

有什么想法吗?

由于

12 个答案:

答案 0 :(得分:19)

看起来你有两个问题:

  1. 您正在尝试运行DDMS两次。您不需要运行DDMS的独立版本,因为它的版本已集成在Eclipse中作为Android插件的一部分。如果您在Eclipse中更改为DDMS透视图,我相信您会发现所有相同的功能都可用。

  2. 您尚未告知DDMS要在localhost:8700上调试哪个VM。在尝试建立远程调试连接之前,必须转到DDMS透视图并单击system_process(或您要调试的任何进程)。

答案 1 :(得分:16)

混乱的Windows主机文件位于C:\WINDOWS\system32\drivers\etc,它应包含以下行:

127.0.0.1 localhost

如果这不起作用,请尝试在Eclipse中进行以下更改。

在窗口下 - >偏好 - > Android - > DDMS:

  • 将基本本地调试器端口设置为“8601”
  • 选中“使用ADBHOST”框,其值应为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源代码+应用程序的步骤

  1. 运行模拟器
  2. 运行ddms
  3. 打开Eclipse(它可能会抱怨无法连接到8600.这是因为,当Eclipse启动时,如果你有Android插件,它会启动ddms。因为我们已经有一个ddms连接到设备,试图连接第二次不起作用)
  4. 在ddms中,选择要调试的线程(当您突出显示它时,它将显示它正在使用的端口以及8700(例如“8649/8700”)。这意味着您可以使用这两个端口连接到这个过程
  5. 从eclipse,使用远程调试配置,连接到您希望的任何进程(最简单的方法是在ddms中突出显示该进程,然后连接到8700)

答案 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

通过这样做,它解决了我的问题。

不知道为什么,但它对我有用。