问题标签 [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 回答
225 浏览

java - Eclipse:内联断点

有没有办法在 Eclipse IDE 中设置内联断点(使用插件)?

例如,当在同一行中调用多个方法时,有没有办法为该行中的特定方法调用设置断点,而不是为整个行设置断点?

(在这个例子中,可以在方法的定义处设置断点baz,但如果它也被其他方法调用,那么如果你大部分时间都必须继续,那可能会很烦人。)

如果我理解正确,Java 调试接口将允许这样做,请参阅Location#codeIndex()

0 投票
1 回答
195 浏览

java - 在 Jboss 中找不到 com.sun.jdi

嘿大家!我在 Jboss EAP 7 中的 Sun.Jdi 上不断收到 ClassNotFound 异常。它由HotswapAgent使用,因此我想知道如何通过模块加载器或其他方式将 com.sun.jdi 添加到 Jboss。

谢谢你。

0 投票
1 回答
57 浏览

jdi - 如何在 JDI 中使用不同的属性文件

是否可以在 JDI 中使用不同的设置文件?例如test.properties&stage.properties并通过作为参数传递开始,例如:gradle -Dtarget=stage ...

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 投票
0 回答
57 浏览

java - 给定方法的所有出口点的 JDI 位置

我正在使用JDI api(Java 调试接口),我尝试为特定方法的第一行代码创建断点请求,但也在该方法的所有“退出点”上(即在所有“返回... ;")。

创建断点请求,我需要一个Location对象(即一种指向可执行代码的指针)

为方法的第一行获取 aLocation相对容易:

获得Location所有“退出点”的问题更大。仅仅获取方法的最后一行可能是不够的,因为该方法可能return在主体中间包含多个语句,我也需要捕获这些语句。

我考虑过使用 a MethodExitRequest,但这会产生大量我不需要的事件,因为它们与类的其他方法相关。(所以它可以完成这项工作,但它会在运行时产生巨大的开销)。

所以我的问题是:我们如何获得一个Location方法的所有出口点?

编辑

附加信息

对于我的特定用例,我需要为一些方法创建断点请求,并且似乎我感兴趣的所有方法都返回 void,因此可以搜索“return void”指令(b1)方法的字节码并根据字节码中 b1 的所有索引创建一个 Locations 对象。

0 投票
1 回答
366 浏览

java - JDI:如何获取 ObjectReference 值?

我正在使用 JDI 重新编码方法中的变量状态。根据教程,我没有找到如何获取 objectReference 值,如 List、Map 或我的自定义类。它只是可以获得PrimtiveValue。

如果 LocalVariable 是 PrimtiveValue 类型,比如int a = 10;,那么它将打印

如果 LocalVariable 是 ObjectReference 类型,比如Map data = new HashMap();data.pull("a",10),那么它将打印

但我想得到如下结果

谢谢!

0 投票
0 回答
44 浏览

jvm - 将 SourceFile 类属性映射到实际文件系统路径的规范方法

SourceFile属性仅包含文件名,而不是完整或相对路径。这不是太多的信息,因为javac它将根据声明类的包将.class文件放置在可能不相关的目录中(相对于参数)。-d虽然这是在运行时查找和加载类所必需的,但它使.class文件位置仅提示.java文件可能位于源树中的位置。

com.sun.jdi.ReferenceType.sourcePaths(String)方法的文档建议使用启发式方法来获取文件系统路径:

在参考实现中,对于没有显式指定源路径的层(Java 编程语言层从不这样做),返回的字符串是源名称(字符串)前缀为这个 ReferenceType 的包名转换为平台相关路径。

没有比这更好的明显方法了。当然,如果文件在预期位置不存在,可以搜索源树并检查文件名是否恰好是唯一的,并将其用作位置。但除此之外,没有太多选择。

有没有其他不明显的方法来解决这个问题?

0 投票
1 回答
24 浏览

jdi - 如何忽略一个元素的核心定位器

定位器树

就我而言,我有一个不在核心窗口中的选择器列表。对于使用定位器“.uni-DialogBox”的窗口,但 listLocator(.gwt-Label.selectbox-item__label) 不在此 dom [ERROR 54:49.549] 中:>>> NewOrderWindow.orderType (>css='.uni-DialogBox'> css='.gwt-Label.selectbox-item__label') ,见屏幕。如何仅针对一个定位器忽略父定位器?

0 投票
0 回答
29 浏览

java - JDI:当我使用 WindowsManager.closeWindow() 时出错

我尝试在测试套件之后使用 WindowsManager.closeWindow() 。窗口关闭,但随后出现错误。我的代码:

堆栈跟踪:

0 投票
0 回答
137 浏览

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

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

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