Написание собственного отладчика затмения

EDIT: Должен быть какой-то способ, которым я могу подойти к этому без написания совершенно нового отладчика. В настоящее время я ищу способы построить поверх существующего Java-отладчика. Если у кого-то есть идеи о том, как получить информацию, уже имеющуюся в отладчике Java (о фреймах стека, переменных, необработанных данных и т. Д.), Это было бы очень полезно.

--

То, что я пытаюсь сделать, это то, что у меня есть этот фреймворк / API, построенный на Java, и я хотел бы написать отладчик подключаемого модуля eclipse, настроенный для моей фреймворк. Вот простой пример:

У меня есть два класса, один называется областью, а другой называется переменной. Область видимости содержит карту переменных. Весь код написан на Java, но я использую это отношение области-переменной почти как новый язык, и мне нужна вкладка отладки переменной, которая дает мне список текущих активных областей действия с переменными, которые в данный момент хранятся внутри. Вот некоторый код:

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;
    }
}

Это, очевидно, очень простой пример, но я хотел бы выполнить нечто похожее на это, где я могу получить окно переменных, установить точку останова и получить & quot; отладчик & quot; перечислите мои активные объекты области и переменные объекты внутри.

Я пытался читать и понимать:http://www.eclipse.org/articles/Article-Debugger/how-to.html

и это довольно плотный (а также чрезвычайно устаревший), но я постараюсь занять некоторое время, чтобы понять это. Я просто хотел посмотреть, есть ли у кого-нибудь рекомендации высокого уровня о том, как подходить к этому типу проблемы, так как у меня мало опыта разработки плагинов в eclipse или создания отладчиков.

Спасибо!

 Thorbjørn Ravn Andersen23 июн. 2012 г., 12:28
По какой причине вы не просто делаете свой фреймворк совместимым с JSR-233 (java-скриптинг)?
 NoBugs23 июн. 2012 г., 00:10
Эта статья предназначена для добавления поддержки новых языков. Зачем вам нужно модифицировать отладчик для класса Java? Не можете ли вы использовать окно «Переменные», чтобы увидеть объекты в текущей области, и развернуть, чтобы увидеть содержимое (например, VariableList)?

Ответы на вопрос(3)

хорошо, я собираюсь добавить второй ответ здесь & # x2026; я полагаю, что я недостаточно знаком с состоянием вашей среды, чтобы понять, почему пользовательские средства форматирования деталей не справились бы с этой задачей. в большинстве случаев я думаю, что они предоставят вам то, что вы ищете.

но если вы действительно заинтересованы в создании другого представления, содержащего эти элементы, то вы можете проверитьзатмение JDT проекта , Вполне возможно, что предоставляемые им точки расширения дадут вам доступ к внутренним переменным и информации стека фрейма, которую вы хотите добавить, а также, возможно, к некоторому пользовательскому интерфейсу, который облегчит вашу работу.

другими словами, вам может не понадобиться писать совершенно новый плагин отладчика, но, возможно, плагин, который может работать вместе с jdt.

на сайте есть указатели на план проекта, исходные репозитории, базу данных отслеживания ошибок bugzilla (используется как для отслеживания ошибок, так и для обсуждения новых функций). возможно, некоторые из тех, кто является экспертом по JDT, могут помочь взвесить их мнение о том, что лучше всего подойдет вашим потребностям.

Решение Вопроса

Поработав над отладчиком eclipse edc, кажется, что написание целого отладчика - это не то, что вам нужно.

Похоже, что во время работы отладчика у вас будет доступ к объектам, которые имеют переменные и области, которые вас интересуют.

вы можете использовать toString () в самих классах или использовать средства форматирования подробностей для отображения изменений в информации, которую вы хотите. вызов toString () может быть довольно подробным и встраиваться в вызовы, показывать целые массивы и т. д. Форматировщики деталей также могут быть довольно сложными.

увидетьhttp://www.robertwloch.net/2012/01/eclipse-tips-tricks-detail-formatter/ , Это лучший из нескольких URL (я не связан с автором).

как только вы довольны выводом объектов Variable и Scope, вы сможете добавлять выражения наблюдения, которые всегда будут отображать их в окне выражений (таким образом, вам не нужно полагаться на локальные переменные в кадре стека, так как вы можете в).

после этого вы получите список переменных и областей действия из вашей платформы, которые вы отслеживаете & # x2026; надеюсь, без необходимости писать весь плагин отладчика Eclipse для этого.

 28 июн. 2012 г., 20:38
Второй, Джон: форматировщики деталей действительно кажутся тем, что вы ищете. Их легко внедрить и протестировать, и они должны предоставить большинство необходимых вам вещей.

Задача не из легких. Я думаю, что эта статья до сих пор является основной ссылкой. Старый, но не устаревший. Попробуйте переварить это, и желательно, чтобы это работало. Перед этим у вас должен быть минимальный опыт разработки плагинов Eclipse.

На рисунке много частей, но первое, что вы должны понять, это то, что когда Eclipse что-то отлаживает (предполагая, что мы используем стандартную модель отладки), у нас есть два отдельных «мира»: сторона Eclipse и сторона интерпретатора. (или, если хотите, «локальные» и «удаленные» стороны).

На стороне Eclipse программирование включает взаимодействие между некоторыми базовыми классами Eclipse и некоторыми вашими собственными классами, которые расширяют или реализуют некоторые классы / интерфейсы Eclipse:

A "launchConfigurationType" (extension point in your plugin.xml) which causes the apparition of a new custom configuration when you click "Debug As -> New Configuration); this goes togetther with some "launchConfigurationTabGroups" definition that defines the "Tabs" dialogs that will appear in your custom launch configuration (eg) (each Tab will have its own class typically).

The launchConfigurationType is typically associated to a LaunchDelegate class, which is sort of your bootstrap class: it has the responsability of creating and starting a running/debugging instance, both on the Eclipse side and on the "interpreter" (or "remote") side.

On the Eclipse side, the running/debugging instance is represented by a IDebugTarget object and its children (the implementation is your responsability); this is created by the LaunchDelegate and "attached" to the remotely running process at launching time.

The remote side, the interpreter or program you are actually debugging, can be anything: a binary executable, a perl script, some app running in a some site (perhaps also a local Java program; but, even in this case, this would probably run in its own JVM, not in the debugging Eclipse JVM!). Your IDebugTarget object must know how to communicate to the "remote interpreter" (eg, by TCP) and perform the typical debugger tasks (place breakpoints, step, run, ask for variables, etc) - but the protocol here is up to you, it's entirely arbitrary.

What is not arbitrary is the hierarchy of your custom classes that the running Eclipse debugger will use: these should have a IDebugTarget as root, and should implement "The debug model" (see figure in article). As said above, the IDebugTarget object is who understands how to make the translation between the EClipse side and the remote side (see this image)

 27 июн. 2012 г., 00:40
Я не уверен в ваших намерениях, но в целом я отвечаю "да". И именно так Eclipse сама отлаживает программу Java, она запускает другую JVM и соединяется с ней через TCP / IP.wiki.eclipse.org/…
 KWJ210426 июн. 2012 г., 23:21
Поэтому, если я попытаюсь написать отладчик, основанный на Java, то, как в примере из моей статьи, мой & quot; интерпретатор & quot; (аналог их интерпретатора pda.pl) - это JVM? Это то, как нормальный Java-код отлаживается, как, например, они также используют эту модель, где есть удаленная и локальная, и есть 2 JVM, одна, на которой выполняется отладчик, и одна, на которой выполняется отлаживаемая программа?

Ваш ответ на вопрос