- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将 jdb 调试 session 附加到正在远程主机上执行的 java 应用程序,但我无法执行此操作。我在 Linux 上工作,使用 openjdk 1.8.0_65、64 位服务器虚拟机。
为了启用端口监听,我运行了 java 应用程序,在命令行中添加了以下参数:
-Xdebug -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8000,server=y,suspend=n
控制台中显示以下消息:
Listening for transport dt_socket at address: 8000
然后应用程序开始正常运行。
然后,我从远程主机执行以下命令:
> jdb -connect com.sun.jdi.SocketAttach:hostname=<remote_host>,port=8000
失败,输出为:
java.net.ConnectException: Conexión rehusada
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
[...]
Fatal error:
Unable to attach to target VM.
为了检查端口是否确实打开并且我可以从远程主机连接到它,我执行了以下操作:
让我们调用正在执行 java 应用程序的主机。 hostA
,以及我要附加 jdb
hostB
的那个,然后:
检查hostA中是否真的有socket监听8000端口
> netstat -tualpn | grep :8000
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 1399/<app_name>
在 hostA 中,检查我是否可以连接到端口 8000(换句话说,尝试从本地主机连接)
> nc -vz localhost 8000
nc: connect to localhost port 8000 (tcp) failed: Connection refused
Connection to localhost 8000 port [tcp/irdmi] succeeded!
使用telnet
,似乎可以连接,但连接一建立就关闭,可能是因为 JVM 正在等待某种请求?
> telnet localhost 8000
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
Java 应用程序。关闭 telnet 连接时显示以下消息:
Debugger failed to attach: timeout during handshak
从 hostB,检查我是否可以连接到 hostA,端口 8000
> nc -vz hostA 8000
nc: connect to hostA port 8000 (tcp) failed: Connection refused
使用远程登录:
> telnet hostA 8000
Trying 172.17.10.127...
telnet: connect to address 172.17.10.127: Connection refused
所以,我无法通过端口 8000 从 hostA
连接到 hostB
,尽管 JVM 正在监听端口 8000,在 hostA
.
由于上述失败,我检查了是否防火墙导致连接被拒绝。我已经通过使用 nc 命令完成了:
在 hostA
中:
# First kill the java app (otherwise the port is busy), then:
> nc -l 8000
在 hostB
中:
> nc -vz <hostA> 8000
Connection to hostA 8000 port [tcp/irdmi] succeeded!
据我了解,以上说明没有防火墙(或等效设备)阻止该端口。
当然,我已经尝试执行 jdb -attach
但它甚至无法从 hostA
执行。
最佳答案
我没有足够的积分来发表评论。所以我把这个作为答案。真的不是。但是:
-Xdebug -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8000,serv=y,suspend=n
难道不应该是:
-Xdebug -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8000,server=y,suspend=n
??
[编辑] 您可能已经考虑到了这一点 - 而且,如果您正在监听 127.0.0.1,那么按理说您不会从远程计算机连接。毫无疑问,您使用的是实际地址,只是没有包含在此处...
关于java - 尝试使用 jdb 附加到进程时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766798/
发生错误时,我的 java 代码中抛出了异常。然后我使用 jdb 运行代码,以便在发生异常时,我可以看到代码所在的状态并进行调试。对于我抛出的所有异常,我输入了一个有用的字符串消息。但是,当 jdb
我在测试中被问到这个问题,我不确定答案是什么,而且我在此处和其他在线地方都找不到答案。所以我希望这里有人能给我一个快速的答案和快速的解释: You debug a Java program using
我正在调试一些使用 Map 的代码,但我很难找到与各种 Integer 相关的值!这是一个最小的工作示例: java代码(保存到.\src): import java.util.Map; import
我已将应用程序附加到 jdb 调试器。我试图通过 jdb 调试器了解全局/类变量的状态。 Class MyClass() { private static String myString;
作为一个倾向于 CLI 的程序员,我想问一下 Java 命令行调试器 JDB 是否能够从当前位置运行并在给定行停止? 例如, 200 public Trade create(TradeCreate
我正在尝试使用 jdb 调试我的应用程序。到目前为止我已经获得了很多东西,但我想打磨它们。 当我在 jdb 中并且想要插入断点或检查变量时,jdb 需要全名 package.class.(method
我正在学习 JDB 并遇到了一些悖论。启动 JDB(使用“jdb ClassName”)后,大多数教程会告诉我输入 > methods ClassName 查看可用方法列表,以便我可以设置断点。如果我
所以,我正在启动一个 Java 程序,如下所示 java -agentlib:jdwp=transport=dt_socket,address=8000, server=y,suspend=n My
我想使用 jdb,我已经尝试运行它几个小时了,我已经搜索了所有示例。我认为这是一个语法问题。我正在尝试像这样运行它: >jdb Main Initializing jdb ... >run Set u
我使用 jdb 进行 Java 开发。对于我的应用程序,我有两个类:WordUniverseTest 和 WordUniverse,主要方法包含在 WordUniverseTest 中。当我在 jdb
我有以下代码: void func() { try { f1() } finally() { if (resource != null) resou
我正在使用 jdb 调试器,它的问题是在每次捕获到异常时都会停止,尽管我没有执行任何 catch .... 语句。在类加载期间有数百个: Exception occurred: java.io.Fil
我需要将 jdb 调试 session 附加到正在远程主机上执行的 java 应用程序,但我无法执行此操作。我在 Linux 上工作,使用 openjdk 1.8.0_65、64 位服务器虚拟机。 我
我用来执行 Java 代码的命令是: java -cp /usr/local/share/java/dbus.jar:/usr/local/share/java/unix.jar:/usr/local
官方文档说明了如何在源代码行或类方法上设置单独的断点: http://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/jdb.html 但我很感兴
package com.android.internal.telephony.dataconnection; public abstract class DcTrackerBase extends H
我正在运行 crawler4j输出到目录/frontier/。该目录下的文件是 00000000.jdb je.info.0 je.info.lck je.lck .jdb 文件是唯一包含数据的文件,
使用 jsadebugd 或 jdb 可以调试已经运行的 JVM,无需任何参数即可启动。我不明白怎么可能,因为我认为,JVM 通过 JIT 将字节码编译为 native 代码,并且无法调试。 谁能解释
你好。 我正在使用 lwjgl 和 vim 编写游戏,我正在尝试使用 jdb 进行调试,但我遇到了一些问题。 首先,我向您展示了我的项目树。 (主要类是Engine.java)。 . ├── buil
当我在 bash 中运行 jdb 时,箭头键会产生奇怪的垃圾: up: ^[[A down: ^[[B left: ^[[D right: ^[[C 所以我不能使用命令历史记录,也不能更正拼写错误,因
我是一名优秀的程序员,十分优秀!