标签: jdi

使用方法入口调试时,为什么调试程序会减慢这么多?

我正在使用jdi接口来创建调试器,当我使用MethodEntryRequests启用方法条目跟踪时,调试程序的速度减慢了几十倍.我为主线程设置了过滤器,并将策略暂停到SUSPEND_EVENT_THREAD.Classfilter是有限的,如果我打印任何收到的事件,它不会显示超过几十个,所以它不应该收到太多.我在本地调试并且使用调试的java程序跟随它的命令行:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337

java debugging jdi

33
推荐指数
3
解决办法
5420
查看次数

JDI线程评估遇到了问题

我正在运行Eclipse for Java.我创建了一个XML文件的DOM版本.现在我想更改文件中元素的属性.我调用了一个方法,在控制DOM的类中调用了一个方法,并且在调试时我得到了一个对话框,说"JDI线程评估遇到了问题.异常处理异步线程队列".

我是Java的相对新手,并没有遇到过这样的错误,我不知道是什么导致了它.

如果有人对问题的原因和/或解决问题的方法有任何建议......

非常感谢!

java eclipse dom jdi

18
推荐指数
2
解决办法
2万
查看次数

如何导入和使用com.sun.jdi.VirtualMachine

我找到了一些专门用于在VirtualMachine中进行调试的com.sun.jdi类,但我不能使用它,因为Sun JDK7中似乎不存在包.

如何使用这个包?

BTW.lib/sa-jdi.jar是不是我想要的

java jdi java-7

15
推荐指数
1
解决办法
8128
查看次数

JDI事件调度nullpointerexception

当我尝试在我的设备上进行调试时,我有时会收到错误并且调试器不会在任何断点上停止.此外,应用程序甚至没有正确启动,它只是在应用程序图标和名称顶部的黑色屏幕冻结.

错误是eclipse中的弹出窗口,标题为"'JDI Event Dispatch'遇到问题.在'JDI事件调度'期间发生内部错误." 我有一个确定和详细信息按钮,当我按下后者时,我得到以下详细信息:"在发生内部错误:"JDI事件调度".java.lang.NullPointerException"

我在Eclipse Java EE Helios Service Release 2中工作.任何帮助将不胜感激

eclipse events jdi dispatch

15
推荐指数
1
解决办法
1万
查看次数

为Java调试器接口实现不同的层

Location类的Java Debugger Interface文档中,有一个段落讨论了该位置的"层".我一直在寻找更多有关如何实现新层(例如,Scala或JRuby)的细节,但我没有找到太多.任何人都可以对这个话题有所了解吗?

java debugging scala jruby jdi

12
推荐指数
1
解决办法
807
查看次数

在"JDI事件调度"java.lang.NullPointerException期间发生内部错误

我有我的java applet codee,我正在尝试使用eclipse Indigo EE进行调试.我正在尝试使用调试配置和端口在远程调试.当我尝试执行应用程序时,它始终给出错误消息,

在"JDI事件调度"java.lang.NullPointerException期间发生内部错误.

并且控制不会在断点处停止.

请帮忙.

此致,KSAT

debugging events jdi dispatch

12
推荐指数
1
解决办法
6624
查看次数

Java调试接口,Lambda和行号

我在更新调试器以使用Java 8时遇到一些问题.例如,请考虑以下程序:

public class Lam {
    public static void main(String[] args) {
        java.util.function.Function<Integer, Integer> square =
            x -> {
            int result = 0;
            for (int i=0;
                 i<x;
                 i++)
                result++;
            return result;
        };
        System.out.println(square.apply(5));
    }
}
Run Code Online (Sandbox Code Playgroud)

正如所料,Java 8将lambda编译为如下所示:

> javap -c -p -v -s -constants Lam
Classfile Lam.class
...
  private static java.lang.Integer lambda$main$0(java.lang.Integer);
...
Code:
  stack=2, locals=3, args_size=1
     0: iconst_0
     1: istore_1
...
LineNumberTable:
    line 5: 0
    line 6: 2
    line 7: 4
    line 9: 12
    line 8: 15
    line 10: …
Run Code Online (Sandbox Code Playgroud)

java lambda jdi java-8

11
推荐指数
1
解决办法
862
查看次数

DebuggerStepThrough等效于Java

.NET有一些方便的注释,指示调试器逐步执行某些方法.我想知道是否有一个可以在Java平台上运行的等价物.

例如:

@DebuggerStepThrough
public void foo() {
  ..
}
Run Code Online (Sandbox Code Playgroud)

会导致调试器在步进时不会停止foo.

我尝试了什么

  • 在类文件中使用SYNTHETIC标志.这导致javac禁止用户代码调用此类方法.
  • 自定义属性.没有JDI API来检索注释.在这个论坛上也提到过.

PS.我正在实现一个调试器并控制发出的字节码

java debugging jdi jvmti

8
推荐指数
1
解决办法
165
查看次数

JDI:如何在调试器中暂停Java应用程序(JVM)

我正在寻找可能的JDI API来在执行期间的任意点暂停JVM.查看BreakPointRequest createBreakpointRequest方法需要一个特定的位置.是否有任何其他API不需要位置或某种方式来获取可以传递以创建断点的当前位置.

我基本上寻找一种方法来附加和暂停应用程序,然后使用JVMTI代理接收BreakPoint事件的回调以执行进一步处理.谢谢

java jdi jvmti

6
推荐指数
1
解决办法
1902
查看次数

如何在 com.sun.jdi.ObjectReference 上中止长时间运行的 invokeMethod?

我有自己的 JDI 调试器,它toString在某些对象上调用该方法:

com.sun.jdi.ObjectReferenceobject object = ...
ThreadReference threadRef = frameProxy.threadProxy().getThreadReference();
Value value = object.invokeMethod(threadRef, toStringMethod,
                    Collections.EMPTY_LIST, ObjectReference.INVOKE_SINGLE_THREADED);
Run Code Online (Sandbox Code Playgroud)

问题是即使在 toString() 方法中没有设置断点, invokeMethod 也永远不会终止,所以我的调试器挂起。例如,当我在Double对象上调用 this 时会发生这种情况。

如何invokeMethod在一段时间后终止执行?

更新:我尝试实现我自己的Double对象并System.out.println()在方法的开头和结尾放置了一些语句,toString()看起来该方法执行得很好,但由于某种原因调试器没有收到结果。也许这是 JDI 中的一个错误,因为有很多这样的错误,但我不是在为此寻找解决方案,我只是在寻找一种方法来中止执行,invokeMethod()如果它花费太多时间。

更新 2:我尝试了ThierryB 的建议,但我只能frameProxy.threadProxy().stop(object);在经理线程中调用。并且管理器线程被阻塞,invokeMethod()因此它不会执行我的命令。我试过这样的事情:

boolean[] isFinished = new boolean[2];
isFinished[0] = false;

DebuggerManagerThreadImpl managerThread = debugProcess.getManagerThread();
new Thread(() - > {
    try {
        Thread.sleep(2000);
        if (!isFinished[0]) {
            System.out.println("Invoked"); …
Run Code Online (Sandbox Code Playgroud)

java debugging breakpoints jdi jvmti

6
推荐指数
1
解决办法
253
查看次数

标签 统计

jdi ×10

java ×8

debugging ×5

jvmti ×3

dispatch ×2

eclipse ×2

events ×2

breakpoints ×1

dom ×1

java-7 ×1

java-8 ×1

jruby ×1

lambda ×1

scala ×1