“无法连接到远程虚拟机”将 jdb 连接到 Windows 上的 Android 模拟器

2022-09-03 13:46:17

我一直试图将jdb连接到Android模拟器一段时间,并且反复遇到:

jdb -sourcepath ./src -attach localhost:8700

java.io.IOException: shmemBase_attach failed: The system cannot find the file specified
        at com.sun.tools.jdi.SharedMemoryTransportService.attach0(Native Method)
        at com.sun.tools.jdi.SharedMemoryTransportService.attach(SharedMemoryTransportService.java:90)
        at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98)
        at com.sun.tools.jdi.SharedMemoryAttachingConnector.attach(SharedMemoryAttachingConnector.java:45)
        at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358)
        at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168)
        at com.sun.tools.example.debug.tty.Env.init(Env.java:64)
        at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010)

Fatal error:
Unable to attach to target VM.

不是很好。解决这个问题的最好方法是什么?我在Windows 7 64bit上运行。


答案 1

目前,这对我有用 - 建立套接字而不是共享内存连接。

>jdb –sourcepath .\src -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

在此之前,您需要进行一些设置-例如,请参阅有关设置非 eclipse 调试器的这组有用详细信息。它包括一个很好的设置初始断点的提示 - 在主目录中创建或编辑jdb.ini文件,内容如下:

stop at com.mine.of.package.some.AClassIn:14

它们将被加载并延迟,直到连接。

编辑:忘了参考杨赫龙的页面


答案 2

尝试退出 Android Studio。

由于ADB守护进程已经在运行,我在Mac上遇到了类似的问题。退出任何正在运行的守护程序后,您应该会看到类似于以下内容的输出:

$ adb -d jdwp
28462
1939
^C
$ adb -d forward tcp:7777 jdwp:1939
$ jdb -attach localhost:7777 -sourcepath ./src
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> 

请参阅我对类似问题的其他答案,以获取更多详细信息以及如何启动/停止守护程序。