【问题标题】:jdb giving java.net.SocketException: Connection resetjdb给java.net.SocketException:连接重置
【发布时间】:2016-06-21 08:30:24
【问题描述】:

我一直在尝试运行 jdb 以尝试将其附加到我的 android 设备上的进程。

我试过的命令如下:

adb forward tcp:12345 jdwp:4127

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345

我们可以假设 pid 为 4127 的进程还活着。

但是,输入2条命令后,我收到如下错误信息:

java.net.SocketException: Connection reset

at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:130)
at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)

我注意到一个奇怪的行为,即仅当我的 1 个应用程序正在运行时才会出现此输出。这可能是由于程序运行时线程或进程或端口的冲突造成的吗?

当我关闭该特定应用程序时,我大部分时间都可以获得以下输出:

Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> Input stream closed.

我还尝试通过以下步骤在管理员模式下运行命令提示符:

netsh advfirewall set global StatefulFTP disable
adb forward tcp:12345 jdwp:4127
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345

输出如下:

java.io.IOException: handshake failed - connection prematurally closed
        at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)
        at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
        at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
        at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
        at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
        at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
        at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
        at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)

Fatal error:
Unable to attach to target VM.

【问题讨论】:

    标签: java android jdb


    【解决方案1】:

    尝试退出 Android Studio。

    问题在于 Android Studio 保持其 ADB 运行,这与您的冲突。有关更多详细信息,请参阅my answer 以了解您的类似问题。

    【讨论】:

      【解决方案2】:

      问题在于我的程序启动了一个 android 调试桥实例。当我的程序尝试运行 jdb 时,会出现 ADB 的竞争条件。由于我的程序在运行 jdb 之前已经创建了一个 ADB 实例,因此 jdb 将永远无法成功附加。即使通过命令提示符运行 jdb 也会得到相同的结果。关闭我的程序会破坏 ADB 的实例,这就是为什么我可以在程序关闭后通过命令提示符运行 jdb。

      我希望我的回答能为为什么会发生这种现象提供一些线索。

      【讨论】:

        猜你喜欢
        • 2010-09-08
        • 2021-03-10
        • 2022-01-18
        • 1970-01-01
        相关资源
        最近更新 更多