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

Posted

技术标签:

【中文标题】无法打开选定的 VM 调试端口 (8700)【英文标题】:Could not open Selected VM debug port (8700) 【发布时间】:2011-02-17 12:39:36 【问题描述】:

我正在尝试按照以下位置的说明使用 Eclipse 调试 android 源代码:

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

我已经下载了源代码,并开始构建它。我按照上面链接中的说明进行操作,一切都很好,直到我运行 ddms 命令。此时,如果 Eclipse 正在运行,我会收到错误消息“”。如果我关闭 Eclipse,那么 ddms 运行没有问题,我可以在模拟器上运行进程。但是,如果我现在打开 Eclipse,我会得到同样的错误。

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

有什么想法吗?

谢谢

【问题讨论】:

请记住,您所遵循的过程允许您调试 Android 平台代码。有很多easier ways to debug application代码。 我对更简单的方法最感兴趣。但是,我的目标是能够调试本机代码。我知道如何调试java。 此过程不会帮助您调试本机代码。为此,您需要使用 GDB 并关注these steps。 如果你使用的是Android Studio,你可以使用Android Device Monitor,DDMS就是其中之一。 【参考方案1】:

看来你有两个问题:

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

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

【讨论】:

感谢您的回复。我想我可能不需要 DDMS,所以我尝试在没有它的情况下进行调试,但我仍然无法让它工作。这就是我正在做的事情。 1)Android模拟器正在运行,我要调试的进程正在运行。 2) 启动 Eclipse 3) 从菜单中选择 Run/Debug Configurations 4) 在“Remote Java Application”下选择“android-debug”选项。 4) 将主机设置为“localhost”,端口设置为 8700。 5) 单击调试 6) 我收到消息“无法连接到远程 VM”有什么想法吗?谢谢(为什么我在这些回复中只能使用这么少的字符?) 另外请注意,如果 Eclipse 没有运行并且我运行 DDMS,它确实成功连接到模拟器,并且我可以看到所有进程。 我不确定您在说什么“远程 Java 应用程序”下的“android 调试”选项,但我仍然认为您的问题是您没有选择要在 DDMS 中调试的进程你真的应该只使用集成到 Eclipse 中的 DDMS。 感谢您的帮助!我很想使用集成到 Eclipse 中的 DDMS,但我显然不知道该怎么做。我正在使用“运行”菜单上的“运行配置”。这将打开一个“调试配置”对话框。在左侧面板中有一个“远程 Java 应用程序”条目。如果我打开它,有一个“android-debug”选项。我选择那个选项。我认为我应该做点别的事情?你能为我指出正确的方向吗。谢谢。 假设您已经拥有installed the Android plug-in,打开 Eclipse 并选择 Window->Open Perspective->Other... 然后选择 DDMS。【参考方案2】:

搞砸的 Windows Host 文件位于C:\WINDOWS\system32\drivers\etc,它应该包含这一行:

127.0.0.1 localhost

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

在窗口下 -> 首选项 -> Android -> DDMS:

将基本本地调试器端口设置为“8601” 选中“使用 ADBHOST”框,值应为127.0.0.1

【讨论】:

这看起来像是能够在 android studio 和 eclipse 中运行应用程序但两者都不能运行的解决方案 因此我现在可以同时使用 AS 和 eclipse,因为我的 AS 会为每个项目导入打开新窗口(不知道原因)和我的系统(即使使用 8Gb RAM ) 无法处理同时运行的两个 AS【参考方案3】:

我通过任务管理器结束进程“adb.exe”然后通过 Windows->Preference 重新加载 SDK 解决了这个问题。我在 Win 7 64 位上运行 Eclipse Indigo。

【讨论】:

我不在 Windows 上,但也许只是 adb kill-server?【参考方案4】:

我也遇到了这个问题(Windows 7),即使我的 /Windows/system32/drivers/etc/hosts 文件中已经包含 127.0.0.1 localhost

我尝试在 Eclipse 首选项中更改 ADBHOST 信息和端口,但这并没有做任何事情。

netstat -b 将“127.0.0.1”显示为 adb 和模拟器的源地址,但始终将我的机器主机名列为“外国地址”。凭直觉,我尝试用我的机器进行调试 未连接 到任何网络(没有 WiFi,没有插入任何网络)......它成功了! (DDMS 能够连接到模拟设备上的虚拟机,我能够很好地调试。)

我认为 DDMS 和/或 adb 发送的消息没有留在我的本地计算机上(它们被发送到我的本地路由器)。 (这只是一个猜测;我不知道如何最终测试它。) IOW,环回没有按应有的方式工作。

由于我的本地主机中已经有 127.0.0.1,我将机器的本地子网地址添加到我的主机文件中,猜测 DDMS/adb 可能正在使用该地址(与 127.0.0.1 相比)。这似乎为我解决了问题。

所以现在我的主机文件有以下几行:

127.0.0.1 本地主机
::1 本地主机
192.168.1.102 本地主机

(我机器的本地 IPv4 地址是 192.168.1.102 。您可以使用 ipconfig 命令检查您的。)

(我遇到了一些关于如何为 Windows 设置处理环回的虚拟网络适配器的网页,例如 Setting up a Microsoft Loopback Adapater (from Oracle Distilled),但还没有时间了解这是否是解决所有这些问题的可行解决方案,也是。)

【讨论】:

【参考方案5】:

我通过打开 Windows 任务管理器并关闭进程“adb.exe”解决了这个问题。然后关闭eclipse并重新打开它。它将正常启动而没有任何错误。

【讨论】:

您的解决方案与 Pallav 发布的解决方案有何不同? 我同意它非常相似...事实上我只是按照他的指示纠正了我的...因此我也赞成他的回答...但是当我尝试重新加载 SDK 时,它是显示一些错误(我不完全记得)......因此我刚刚重新启动了eclipse。我将此答案发布为帕拉夫解决方案的变体。我很抱歉忘记在里面提到他的名字。【参考方案6】:

仅供参考。但我想这可能符合你的情况。

8700 端口是 ddms 非常特殊的端口;没有办法改变端口。 端口 8700 用于聚合来自每个 Dalvik VM 的数据包。

会有两种情况;

案例 1) 如果您将“基本本地调试器端口”(在 Eclipse ddms 首选项对话框中)设置为 8700,那么您将看到错误 - “无法为调试器绑定到本地 8700”,每次启动 ddms。但是没问题,因为如果ddms不能绑定8700到第一个VM,那么就会连接到8701,然后是8702,以此类推。

case 2) 即使您将“Base local debugger port”(在 Eclipse ddms 首选项对话框中)设置为 8600,在某些情况下,您也可能会看到错误 - “Can't bind to local 8700 for debugger”。因为,如果您的设备有超过或等于 100 个 dalvik 虚拟机,从端口 8600 开始分配给每个虚拟机的端口可能会达到 8700 端口。但是,不会出现与情况 1) 相同的问题。

所以,如果您真的不想看到错误,您必须将 Eclipse ddms 首选项对话框中的“Base local debugger port”设置为 8701 或更高版本。

独立的ddms或android monitor使用与Eclipse不同的设置文件,所以可能不会出现这种问题。

~

【讨论】:

【参考方案7】:

遇到同样的问题,控制台输出(我启动 ddms 的地方)中的不同端口号引起了我的注意

然后从documentation得知,8600是默认的基本端口号。每个新进程都使用下一个可用端口(8601,8602,...)。另外,8700是默认的活动端口号(表示dbms中当前选择的进程)

以下是调试 Android 源+应用程序的步骤

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

【讨论】:

【参考方案8】:

当您使用具有相同端口号的另一个 VM 时,会出现这种类型的问题。例如,您使用的是从 android 开发者网站下载的 Android SDk 完整包。现在你要使用 Eclipse 并插入 ADT、SDK。发生此类错误的可能性很高。它发生在我身上。要克服这个困难,您可以这样做:Window-Preferences-Android- 选择 DDMS- 更改基本本地调试器端口(使用 8601 而不是 8600)。 它可以工作。谢谢

【讨论】:

【参考方案9】:

我是通过重启电脑完成的

【讨论】:

【参考方案10】:

为了完整起见:(在 win 7/Vista 上)不仅你必须确保线路

127.0.0.1 localhost

存在于

C:\WINDOWS\system32\drivers\etc

您还需要注释掉所有从 127.0.0.1 解析的其他本地虚拟主机。如果您在同一台机器上开发 Web 内容并提前设置不同的主机名循环回本地,这很可能是这种情况。

【讨论】:

【参考方案11】:

我只通过关闭 android studio 解决了这个问题,以便 eclipse 可以获取 ddms

【讨论】:

【参考方案12】:

当我在 Ubuntu 16.04 上的 $ANDROID_HOME/tools/monitor 中执行监视器时,它显示

无法打开选定的 VM 调试端口 (8700)。确保你不 运行另一个 DDMS 或 eclipse 插件实例。如果 它正在被其他东西使用,请在 偏好。

我尝试执行以下操作:

在窗口下 -> 首选项 -> Android -> DDMS:

将基本本地调试器端口设置为“8601”选中“使用 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

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

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

【讨论】:

以上是关于无法打开选定的 VM 调试端口 (8700)的主要内容,如果未能解决你的问题,请参考以下文章

无法打开选定的 VM 调试端口 (8700)。确保您没有运行另一个 DDMS 或 eclipse 插件实例

外网无法访问VM中的hadoop yarn的8088端口,网页打开不了

无法在 IntelliJ IDEA 中打开调试器端口

无法通过 IntelliJ 打开调试器端口

无法使用 intelliJ Idea 打开 Spring Boot 调试的调试器端口

无法在 GCP 上打开 vm 实例的 ssh:无法连接到后端(代码:4003)