问题标签 [jdi]

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 投票
1 回答
43 浏览

java - 如何知道 com.sun.jdi.ObjectReference 是否是枚举?

如何确定com.sun.jdi.ObjectReference实例是否为枚举?我可以获得返回的实例的类型(如果它是一个类)ObjectReference.type()ClassType

0 投票
0 回答
43 浏览

java - 如何检查 ClassType 是否继承自 JDI 中的 java.util.Collection?

我可以获得 a 的所有接口,ClassType但这allInterfaces()会导致对调试对象的许多 JDWP 调用很慢。另一种方法是检查这一点:

但是方法isAssignableFrom()java.lang.Class,所以我必须invokeMethod像这样调用这个方法:

但是这里有两个问题:

  1. classType不能用作方法调用的参数,它不是Value
  2. 如何将java.util.Collection作为参数提供给 Method (Arrays.asList(myClassType, ...))

另外,有没有更简单的方法来检查给定ClassType的是否是 a java.util.Collection

0 投票
0 回答
38 浏览

java - 如何禁用 JDI 中的所有 EventRequst?

要禁用EventReqeustsJDI 内部的所有功能,目前我正在使用:

这行得通,但是有没有更直接的方法来做到这一点?调用所有这些方法也相当慢......

0 投票
0 回答
46 浏览

java - 如何在 Java JDI 中创建新的字符串值?

我想在 JDI 中调用一个String作为参数的方法。所以首先我必须创建一个Stringvalue( com.sun.jdi.Value),但我想到的唯一方法是使用newInstance()on 方法ClassType,但是这个方法也ValueinvokeMethod()我一开始想调用的那样作为参数。所以我仍然需要一个com.sun.jdi.Value来创建一个String....但是我怎样才能创建没有任何字符串com.sun.jdi.Value

0 投票
0 回答
65 浏览

scala - 如何确定运行 scala 程序的 jvm 参数?

TL;DR:通过 JDI 启动 Scala 程序的洁净方式是什么?

我想使用JDI为 Scala 实现一个调试器。特别是我想使用LaunchingConnector。理想情况下,我希望用户指定我应该启动 Scala 2.11 还是 2.12。

我在我的系统上安装了 Scala 2.11,通过运行 Scala shell 并查看我的进程表,我可以确定以下 JVM 命令行选项足以完成工作:

environment.get("options").setValue("-Xmx256M -Xms32M -classpath /usr/share/scala-2.11/lib/hawtjni-runtime.jar:/usr/share/scala-2.11/lib/jansi.jar:/usr/share/scala-2.11/lib/jline.jar:/usr/share/scala-2.11/lib/scala-actors.jar:/usr/share/scala-2.11/lib/scala-compiler.jar:/usr/share/scala-2.11/lib/scala-library.jar:/usr/share/scala-2.11/lib/scala-parser-combinators.jar:/usr/share/scala-2.11/lib/scala-reflect.jar:/usr/share/scala-2.11/lib/scala-xml.jar:/usr/share/scala-2.11/lib/scalap.jar:scalacheck_2.11-1.14.1.jar:target/scala-2.11/classes/ -Dscala.home=/usr/share/scala-2.11 -Dscala.usejavacp=true -Denv.emacs=")

对于上下文,这与environment.get("main").setValue("scala.tools.nsc.MainGenericRunner <my program> <arguments to my program>")where (实际上但不是字面意思)结合使用val environment = com.sun.jdi.Bootstrap.virtualMachineManager().defaultConnector().defaultArguments()

以上都是必要的吗?

有什么方法可以使用 JDI 框架启动一个工作的 Scala 进程,而无需对上述路径进行硬编码?有没有办法可以找出用于 Scala 2.12 的路径?

请注意,我的类路径还包括scalacheck我手动下载的 jar 文件。我可以以编程方式确定 sbt 将库文件下载到哪里吗?我也可以计算类路径的那部分吗?

0 投票
0 回答
63 浏览

scala - 如何使用 JDI 检测 invokedynamic 和 scalac 2.12 输出代码

我想使用 JDI 对使用/用于 scala 2.12 编译的 ScalaCheck 进行检测。

通过运行,javap我得出结论,scalac 2.12.x 发出调用动态指令(对于 x 的某些值),其中 scala 2.11 用于生成内部类,尤其是嵌套方法/函数。

这提出了一个挑战,因为出于性能原因,我想在某些特定的嵌套函数(特别是result(x: T)in Prop.forAllShrink)上设置和取消设置断点。

是否可以invokedynamic使用 JDI 检测代码?如果是这样,怎么做?

我是新手invokedynamic,不清楚该机制是如何工作的。我的理解是,您的代码(在我的示例中由 scalac 发出的代码)在每次invokedynamic调用时都会做出链接决策,除了出于性能原因,此决策是根据用户可指定的标准进行缓存的。但是,不执行运行时代码生成。这表明原则上invokedynamic代码应该是可检测的。

我还在一些 scalac 输出中看到了一个可怕的名字:deserializeLambda. 我不太确定这意味着什么,但我认为这并不意味着我会过得很轻松。

0 投票
0 回答
295 浏览

java - Eclipse 中使用 JDI 调试模型 version3.17.0.v20201117-1145 的 java.lang.ClassNotFoundException

直到几天前,我在 Windows 10 下使用 Eclipse 2020-12 和 OpenJDK 14 都没有问题,现在我无法打开或使用任何使用 JDI 的功能ClassNotFoundException(即:设置运行配置、启动服务器、打开调试首选项, ETC)。

我不记得什么都没做,并确保我已经使用全新的工作区进行了全新安装:第一次运行后,保持 eclipse 不变,问题再次出现:只需打开 eclipse,转到 java 调试首选项,关闭eclipse,重新打开它并做同样的事情会触发错误。

这是异常堆栈跟踪:

并且有会话数据:

在我看来,org.eclipse.jdt.debug 版本 3.17.0.v20201117-1145 和 JDK 之间存在某种不兼容。我将做进一步的测试,但如果有人能指出我的解决方案,我将不胜感激。

我应该打开一个错误吗?

更新:使用 OpenJDK 15 解决了这个问题,所以它绝对介于最新的 Eclipse 和 OpenJDK 14 之间。

0 投票
1 回答
191 浏览

java - Is it possible to start java jdwp after JVM startup (aka: at runtime) without command line parameters?

I would like to enable debugging at some point on the current JVM without adding the command line parameters -agentlib:jdwp.

Is it possible to do so programmatically from within the current running JVM ? Without any third party libraries ?

Other command line parameters (such as -Djdk.attach.allowAttachSelf=true) can be considered.

causes :

0 投票
1 回答
119 浏览

java - 使用 Java 代理获取给定 Java 类的实例数?

是否可以使用 Java 代理来获取任何 Java 类的实例数?例如,如果我们有

AppleJava 代理将返回JVM 中有多少实例。如果 Java 代理无法实现,是否可以以另一种跨平台方式进行 - 并且不启用调试模式(因此 JVMTI 和 JDI 除外)?

0 投票
1 回答
67 浏览

java - 如果 JVMTI 不是,Java 的 JDI 跨平台如何?

所以Java的调试接口是使用JVMTI作为后端......但是JVMTI需要在目标架构上编译,那么JDI使用的这些JVMTI函数是预编译并作为库随JDK一起提供的吗?这意味着我可以在不使用 JDI 的情况下使用那些预编译的库……对吗?我假设只有少数函数已经编译,但如果我需要这些函数,那么我不需要自己编译它们的麻烦......