问题标签 [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 - JPDA MethodEntryEvent 导致应用程序运行非常缓慢
我正在尝试捕获在任何 android 应用程序中进行的所有方法调用。为此,我使用 JDI 为应用程序的每个正在运行的线程注册 MethodEntryRequest。我成功地做到了这一点,但我面临的问题是应用程序变得非常非常慢。所以我想知道我在执行过程中是否做错了什么。我正在添加我的代码,我首先注册 ClassPreparedRequest 以捕获应用程序进程对每个类的加载,并在其中为导致类加载的线程注册 MethodEntryRequest 和线程过滤器。
注册 ClassPreparedRequest 的代码是
java - 是否可以修改 JDIStackFrame 中 stepOver() 的行为?
可用于自定义 Eclipse JDT 的默认调试行为的扩展点并不多(https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fextension-点%2Findex.html)。我需要一种方法来根据当前调试的类来决定调试器访问的下一帧是什么。是否有可能以这种方式扩展默认的 Java 调试器?有没有例子?
java - 局部变量上的 JDI 观察点
我需要在局部变量上设置观察点,但问题是 JDI 允许ModificationWatchpoint
并且AccessWatchpoint
只能在类/实例变量上设置。我能想到的唯一方法是在每行执行后监视堆栈帧,并将变量的当前值保存在HashTable
. 因此,当执行一行后值发生变化时,我声明变量修改,并且当其他变量的值被修改并且它包含其他变量也包含的值时,我声明变量访问。但是在我查找变量访问的方法中存在一个问题是假设
在上述情况下,我的方法将找不到变量 x 的变量访问。
所以我的问题是 JDI 是否支持任何功能来完成上述任务?
java - 解决 JDWP 错误 502
我正在开发一个 JDI 项目并将其连接到 tomcat 服务器。如果我的代码中有一个错误导致我的项目失败,而连接到 tomcat 服务器时,我将com.sun.jdi.InternalException: Unexpected JDWP Error: 502
在调用时开始获取。我发现解决此问题的唯一方法是重新启动我的 JDI 项目和 tomcat 服务器。是否有另一种以编程方式解析 JDWP 代码 502 的方法?根据下面文章中的信息,是否可以在连接到虚拟机后终止所有先前调用的方法?
根据这篇文章JDPW错误列表定义为:
ALREADY_INVOKING 502 Previous invoke not complete.
java - 是否可以通过 JDI 检测 Object 类?
我正在尝试创建一些检测工具。我想跟踪每个对象分配。我想到的最简单的想法是在每个对象调用它时重新转换 Object 构造函数(我知道数组的初始化方式不同)。
我尝试使用 java 代理机制,但它导致java.lang.instrument.UnmodifiableClassException
. 显然,Java 代理无法转换 Object 类,因为它是不可修改的。
然后我尝试使用JDI,我调试的程序看起来像:
调试器只做了这个:
在该目标程序退出并显示消息后:
我在这里做错了吗?是否可以这样转换 Object 类?我知道JVMTI但我想避免使用 C 代码,那么还有其他不需要本机代码的方法吗?
免责声明我知道这里已经提出了一些类似的问题(例如,入侵 java.lang.Object:调用自定义外部类使 JVM或JDI 崩溃、Java 字节码检测和 Java 代理(JWDP、JVMTI)),但他们没有向我解释一切。
- -编辑 - -
转换后Object
的类如下所示:
我也做了更多的测试,如果我把类似的东西放进int i = 1; int j = 2 + i;
去。
我还尝试了修改Integer
构造函数 - 这导致了另一个异常:
类已成功转换,但在运行时链接到该类时出现问题。我不知道它是否以某种方式链接。Object
当一些内部的东西试图创建新实例时,可能会发生类似的事情。
我对线很好奇Object var2 = null;
。Javaassist 总是放置ACONST_NULL
字节码,但这不是问题的原因。
---编辑2---
我试图改变另一种Object
方法。转换成功,但在运行时再次出现错误:
对我来说,真正的问题似乎在于NoClassDefFoundError
. 我的假设是它与java中的类加载器系统有某种关系(?)。我能以某种方式避免这样的错误吗?我对类加载器了解不多:/
java - StepRequest 带有 StepRequest.STEP_MIN 参数
在 Java 调试接口中,带有 StepRequest.STEP_MIN 参数的 StepRequest 是什么意思?https://docs.oracle.com/javase/7/docs/jdk/api/jpda/jdi/com/sun/jdi/request/StepRequest.html Java Docs 说“进入下一个可用位置”。下一个可用位置是什么?我了解 StepRequest.STEP_LINE 参数逐行运行,但 StepRequest.STEP_MIN 参数是什么?当我使用此参数运行时,单行有多个步骤请求,我无法理解。
java - 解释跟随 StepRequest 的行为
我正在使用以下代码通过 StepRequest 运行一些程序。
在StepEvent
我使用 . 获取 StepEvent
event.location().lineNumber()
的位置时,问题是,我为多个 StepEvents 获得了相同的行号,这应该是不可能的,因为我已将STEP_LINE
其作为创建StepRequest
. 但是我可以看到那些StepEvents
具有相同行号的人在调用时会有所不同
event.location().codeIndex()
我想知道为什么我会得到如此不寻常的结果。
java - Java JDI ReferenceType 获取绝对路径
ReferenceType
是否可以从JDI中获取绝对文件路径?我想列出特定类的所有行位置,但该类引入了多种引用类型,因此我希望能够确定它是哪一种。这些类也没有名称空间来帮助过滤。
IE namespace user : location /user.java
2 例。
java - JDI EventRequestManager 最大 EventRequests
嗨,我使用 JDI 为 Java SE 编写了一个小快速和脏代码覆盖分析器。它为它可以为某些类或包找到的每个位置设置一个断点。
我现在想知道这个类有多少 EventRequests: https ://docs.oracle.com/javase/7/docs/jdk/api/jpda/jdi/com/sun/jdi/request/EventRequestManager.html可以处理?
我用超过 100 个附加的 EventRequest 对其进行了测试。是否有人存档以达到限制或知道限制在哪里?