我一直试图将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上运行。
答案 0 :(得分:14)
目前这对我有用 - 制作套接字而不是共享内存连接。
> jdb -sourcepath。\ src -connect com.sun.jdi.SocketAttach:hostname = localhost,port = 8700
事先你需要做一些设置 - 例如,看看这组useful details on setting up a non-eclipse debugger。它包含一个设置初始断点的好提示 - 在主目录中创建或编辑jdb.ini文件,内容如下:
stop at com.mine.of.package.some.AClassIn:14
并且它们将被加载并推迟到连接之前。
编辑:忘记参考Herong Yang's page。
答案 1 :(得分:1)
尝试退出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 ...
>
有关详细信息以及如何启动/停止守护程序,请参阅my other answer类似问题。
答案 2 :(得分:0)
答案#1:在我之前链接的主机文件中映射localhost。只是为了确定。
答案#2:如果您使用的是共享内存,则bit-size很容易成为问题。确定确定你到处使用相同的字宽。
答案 3 :(得分:0)
要调试应用程序,请按照以下步骤操作:
在设备上打开应用程序。
使用jdwp查找PID(确保清单中的'android:debuggable'设置为true):
adb jdwp
使用以下参数启动JVM:
java -agentlib:jdwp=transport=dt_shmem,server=y,address=<port> <class>
此命令的预期输出:
Listening for transport dt_shmem at address: <port>
使用jdb附加应用程序:
jdb -attach <port>
如果jdb成功附加,我们将看到jdb cli。
示例:
> adb jdwp
12300
> java -agentlib:jdwp=transport=dt_shmem,server=y,address=8700 com.app.app
Listening for transport dt_shmem at address: 8700
> jdb -attach 8700
main[1]