问题标签 [jdwp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
369 浏览

java - 如何以编程方式挂起当前的 JVM 并等待调试器连接?

我的目标是在 Java 中实现一个小型库,它允许以编程方式执行一些操作,然后暂停当前的 JVM,直到调试器连接到它。

我想它的一部分至少是可能的,例如。当以调试模式启动 JVM 时,suspend=y它将等待调试器连接。有没有人有指向实现此功能的代码的指针?

似乎 JVMTI 可能使我能够以编程方式执行类似的操作,但我想知道是否有更高级别的 API,或者是否有人有关于如何从 Java 与 JVMTI 交互的代码示例/说明(我的假设是代理在JVMTI 将能够暂停 JVM,但我需要从 Java 代码中调用它)。

更新:这是我到目前为止发现的。

1) 从 Java 调用 JVMTI 代码相对简单,方法是使用 JNI 函数,然后使用 jvmti env。诀窍是在代理加载期间保持对 jvmtienv 的引用。这篇博文非常有帮助https://www.javacodegeeks.com/2014/12/own-your-heap-iterate-class-instances-with-jvmti.html

2)挂起选项的功能,可以在启动时传递给JVM并等待调试器连接后再恢复执行,这似乎不是可以重用的东西。似乎它可能只是侦听此端口的调试器代理,一旦建立连接,它将继续执行/恢复线程。

3)为了实现我想要的更高级别的 API,似乎普通的 thread.suspend() 可能会做我想要的。那么问题是它与 SuspendThread 有何不同。我为此打开了另一个问题:JVMTI SuspendThread 和 Javas thread.suspend 有什么区别?.

0 投票
1 回答
174 浏览

java - 从一个代理通过 JVMTI 中的 SetBreakpoint 设置的断点对连接到 JVM 的远程调试器是否可见?

让我们假设一个远程调试器连接到本地 JVM。在某些时候,如果 JVMTI 代理(调试器除外)通过 SetBreakpoint 设置断点,远程调试器是否可以看到它?远程调试器是否能够跳过或删除此断点?

可见我的意思是断点命中事件将被发送到远程调试器,因此调试器将能够以与设置断点的人相同的方式运行。

0 投票
1 回答
3399 浏览

java - 如何在 linux 服务器上禁用 JDWP 接口?

我在stackoverflow上看到过这个问题,但没有明确的答案。如何在 linux 服务器上禁用 JDWP?由于 RCE,我们有一个安全团队建议禁用 JDWP。

参考:https ://ioactive.com/hacking-java-debug-wire-protocol-or-how/

谢谢你。

0 投票
0 回答
17 浏览

java - 如何使用python自动退出jdb

我正在尝试通过 python3 运行 jdb。

但它卡在那里,因为它正在等待输入。

有没有办法自动退出?

0 投票
1 回答
595 浏览

java - 如何通过 nginx 反向代理调试远程 Java 应用程序

我需要调试在 nginx 反向代理后面运行的远程 java 应用程序。我收到以下错误:

无法附加到远程调试对象 VM。原因:java.io.IOException: Received invalid handshake

实现此目的的正确 nginx 配置应该是什么?

通过直接定位应用程序的主机,我已成功地将 vscode java 调试器附加到远程 java 应用程序。

解析器是 127.0.0.11,因为我使用的是 nginx docker 映像。

app.xyz.com.conf我在 conf.d 中的 nginx 配置文件:

提前致谢!

0 投票
0 回答
383 浏览

java - 来自长时间运行的 Java 服务器的 JDWP 内存不足错误

我正在使用以下命令运行服务器:

服务器在 AWS 云(EC2 小实例)上运行,并且端口 8000 是开放的,因此调试器(在我的例子中是 IntelliJ)可以通过 JDWP 协议连接到远程 JVM。

问题是有时服务器会意外关闭并显示以下消息:

似乎“内存不足”错误与 JDWP 相关,而不是代码。

我见过JVMTI_ERROR_OUT_OF_MEMORY几次,但从未java.lang.OutOfMemoryError从应用程序本身看到过。

如何解决此 jdwp 错误?禁用 jdwp 调试器是唯一的方法吗?

0 投票
1 回答
520 浏览

java - 使用 Jlink 时如何安装 jwdp 依赖项

我正在创建一个带有 Spring Boot 应用程序的容器。Java 和所需的模块使用jlink. 它看起来像这样:

入口点如下所示:

容器启动失败,因为 JVM 找不到jdwp. 没有jlink包含jdwp二进制文件的文档。可能是设计使最小的运行时间不需要支持调试。

所以我试图将所需的库手动放入/opt/jre/lib容器中。我从运行 OpenJDK 11 的 linux vm 复制libjdwp.so并使用以下命令将其放入我的容器中:

这导致启动时崩溃:

有没有人想出一种一致的方式来为 java VM 提供 jdwp jlink

0 投票
0 回答
137 浏览

java - 如何在 JDI(Java 调试接口)中放置非阻塞断点?

当你有一个BreakpointEventStepEvent在 JDI(Java 调试接口)中时,会发生什么是当前正在执行的程序(被调试者)被挂起,直到调试器处理断点事件并恢复被调试者。但是如果你有很多断点,这会变得很慢,即使调试器每次收到断点事件时都会立即恢复被调试者(调试器和被调试者之间的通信是通过套接字或共享内存进行的,这不是即时的)。

但是,如果您想构建一个工具,您只需要事件的信息来存储它们并在以后处理它们(例如,在构建分析器等时),您如何设置这些断点而不暂停程序?或者换句话说,如何以异步方式从正在运行的程序中提取堆栈跟踪和变量信息?

0 投票
1 回答
462 浏览

android - 如何从 Linux 命令行在 Genymotion 模拟器上调试 Android APK?

我正在使用 Genymotion (VirtualBox) Android 模拟器。当我尝试从命令行将 JDB 附加到正在运行的 Android 应用程序时,我很java.io.IOException: handshake failed - connection prematurally closed高兴,即:

但是,使用 Android Studio IDE/GUI,我可以通过单击按钮来附加调试器。根据我的情况,无法使用 Android Studio 进行调试。

0 投票
1 回答
196 浏览

java - 如何通过HTTP协议远程调试java

我的 webapp 基础 springboot 部署在 Kubernetes 中。因为公司限制使用 NodePort 类型的服务。有没有办法将 jdwp 传输到 http 以便通过 http 协议进行远程调试。