问题标签 [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.
java - 如何知道 com.sun.jdi.ObjectReference 是否是枚举?
如何确定com.sun.jdi.ObjectReference
实例是否为枚举?我可以获得返回的实例的类型(如果它是一个类)ObjectReference.type()
。ClassType
java - 如何检查 ClassType 是否继承自 JDI 中的 java.util.Collection?
我可以获得 a 的所有接口,ClassType
但这allInterfaces()
会导致对调试对象的许多 JDWP 调用很慢。另一种方法是检查这一点:
但是方法isAssignableFrom()
在java.lang.Class
,所以我必须invokeMethod
像这样调用这个方法:
但是这里有两个问题:
classType
不能用作方法调用的参数,它不是Value
- 如何将
java.util.Collection
作为参数提供给 Method(Arrays.asList(myClassType, ...))
?
另外,有没有更简单的方法来检查给定ClassType
的是否是 a java.util.Collection
?
java - 如何禁用 JDI 中的所有 EventRequst?
要禁用EventReqeusts
JDI 内部的所有功能,目前我正在使用:
这行得通,但是有没有更直接的方法来做到这一点?调用所有这些方法也相当慢......
java - 如何在 Java JDI 中创建新的字符串值?
我想在 JDI 中调用一个String
作为参数的方法。所以首先我必须创建一个String
value( com.sun.jdi.Value
),但我想到的唯一方法是使用newInstance()
on 方法ClassType
,但是这个方法也Value
像invokeMethod()
我一开始想调用的那样作为参数。所以我仍然需要一个com.sun.jdi.Value
来创建一个String
....但是我怎样才能创建没有任何字符串com.sun.jdi.Value
?
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 将库文件下载到哪里吗?我也可以计算类路径的那部分吗?
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
. 我不太确定这意味着什么,但我认为这并不意味着我会过得很轻松。
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 之间。
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 :
java - 使用 Java 代理获取给定 Java 类的实例数?
是否可以使用 Java 代理来获取任何 Java 类的实例数?例如,如果我们有
Apple
Java 代理将返回JVM 中有多少实例。如果 Java 代理无法实现,是否可以以另一种跨平台方式进行 - 并且不启用调试模式(因此 JVMTI 和 JDI 除外)?
java - 如果 JVMTI 不是,Java 的 JDI 跨平台如何?
所以Java的调试接口是使用JVMTI作为后端......但是JVMTI需要在目标架构上编译,那么JDI使用的这些JVMTI函数是预编译并作为库随JDK一起提供的吗?这意味着我可以在不使用 JDI 的情况下使用那些预编译的库……对吗?我假设只有少数函数已经编译,但如果我需要这些函数,那么我不需要自己编译它们的麻烦......