java - 编写自定义 Eclipse 调试器

标签 java eclipse debugging eclipse-plugin

编辑: 一定有某种方法可以解决这个问题,而无需编写全新的调试器。我目前正在研究在现有 Java 调试器之上构建的方法。如果有人对如何获取 Java 调试器已有的信息(关于堆栈帧、变量、原始数据等)有任何想法,那将非常有帮助。

--

我想做的是我有这个基于 Java 构建的框架/API,我想编写一个针对我的框架定制的 eclipse 插件调试器。这是一个简单的例子:

我有两个类,一个叫做作用域,一个叫做变量。范围包含变量映射。代码全部在 java 中,但我几乎像使用新语言一样使用这种范围变量关系,并且想要一个变量调试选项卡,它为我提供当前 Activity 范围的列表以及当前存储在其中的变量。这是一些代码:

import java.util.Hashtable;

public class Scope {
    private Hashtable<String, Variable> variableList = new Hashtable<String, Variable>();

   // constructor 
    public Scope(){

    }

    public void put(String key, Variable v){
        variableList.put(key, v);
    }

    public Variable get(String key){
        return variableList.get(key);
    }


}

public class Variable {

    private String value;
    private String name;

    public Variable(String aName, String aValue){
        name = aName;
        value = aValue;
    }

    public String getValue(){
        return value;
    }

    public String getName(){
        return name;
    }

    public void setValue(String aValue){
        value = aValue;
    }
}

这显然是一个非常简单的例子,但我想完成类似的事情,我可以得到一个变量窗口,设置一个断点,并有一个“调试器”列出我的 Activity 范围对象和里面的变量对象.

我一直在努力阅读和理解:http://www.eclipse.org/articles/Article-Debugger/how-to.html

它非常密集(也非常过时),但我会尝试花一些时间来理解它。我只是想看看是否有人对如何解决此类问题有任何高级建议,因为我在 Eclipse 中开发插件或制作调试器的经验很少。

谢谢!

最佳答案

这不是一件容易的事。我认为那篇文章仍然是主要引用。旧,但不落伍。试着消化它,最好让它发挥作用。在此之前,您应该具有开发 Eclipse 插件的最低限度经验。

图中有很多部分,但首先你必须明白,当 Eclipse 调试某些东西时(假设我们使用的是标准调试模型),我们有两个独立的“世界”:Eclipse 端和解释器端(或者,如果你愿意,“本地”和“远程”端)。

在Eclipse端,编程涉及一些Eclipse核心类和你自己的一些类之间的协作,这些类扩展或实现了一些Eclipse类/接口(interface):

  • launchConfigurationType”(plugin.xml 中的扩展点),当您单击“Debug As -> New Configuration”时会导致出现新的自定义配置;这一起进行使用一些“launchConfigurationTabGroups”定义来定义将出现在您的自定义启动配置 (eg) 中的“选项卡”对话框(每个选项卡通常都有自己的类)。

    <
  • launchConfigurationType 通常与 LaunchDelegate 类相关联,这是您的引导类:它负责创建和启动运行/调试实例,两者都在 Eclipse 端在“口译员”(或“远程”)方面。

  • 在 Eclipse 端,运行/调试实例由 IDebugTarget 对象及其子对象表示(实现由您负责);这是由 LaunchDelegate 创建的,并在启动时“附加”到远程运行的进程。

  • 远程端,即您实际调试的解释器或程序,可以是任何东西:二进制可执行文件、perl 脚本、在某个站点上运行的某个应用程序(也许也是本地 Java 程序;但是,即使在在这种情况下,它可能会在自己的 JVM 中运行,而不是在调试 Eclipse JVM 中运行!)。您的 IDebugTarget 对象必须知道如何与“远程解释器”通信(例如,通过 TCP)并执行典型的调试器任务(放置断点、步骤、运行、请求变量等)——但这里的协议(protocol)由您决定,这完全是任意的。

  • 运行的 Eclipse 调试器将使用的自定义类的层次结构不是任意的:它们应该有一个 IDebugTarget 作为根,并且应该实现“调试模型”(参见文章中的 figure)。如上所述,IDebugTarget 对象是了解如何在 EClipse 端和远程端之间进行转换的对象(参见 this image )

关于java - 编写自定义 Eclipse 调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164306/

相关文章:

java - .POST_MODULE : Failed to process phase POST_MODULE of deployment

Eclipse 中的 Android 和 Javah

android - 如何调试 Android IntentService?

c++ - 机器相关的_write失败,错误代码为EINVAL

c - 尝试使用 free() 来了解它是如何工作的

java - 如何使用按钮向 JFrame 添加 1 个绘图?

java - 使用 Apache Commons Pool 2 在池中添加对象

javax.net.ssl.SSLException : SSLSocketFactory is null 异常

java - Spring Data MongoDB : MergeOperation returns the whole collection. 为什么?

eclipse - Jersey REST Web 服务、Tomcat、Eclipse 和 404