Подтвердить что ты не робот

Запись пользовательского отладчика eclipse

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

-

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

У меня есть два класса, один называется scope и один называется переменной. Область содержит карту переменных. Код все в 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;
    }
}

Это, безусловно, очень простой пример, но я хотел бы сделать что-то похожее на это, где я могу получить окно переменных, установить точку останова и включить "отладчик" из моих активных объектов области видимости и переменных объектов внутри,

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

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

Спасибо!

4b9b3361

Ответ 1

работая над отладчиком eclipse edc, похоже, что писать целый отладчик - это не так, как вы хотите.

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

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

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

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

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

Ответ 2

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

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

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

  • A startConfigurationType "(точка расширения в вашем plugin.xml), которая вызывает появление новой настраиваемой конфигурации при нажатии кнопки" Отладка как → Новая конфигурация "); с определением" launchConfigurationTabGroups ", которое определяет диалоги" Вкладки ", которые появятся в вашей настраиваемой конфигурации запуска ( например,) (каждая вкладка будет иметь свой собственный класс).

  • Тип launchConfigurationType обычно связан с классом LaunchDelegate, который является вашим классом начальной загрузки: он отвечает за создание и запуск экземпляра запуска/отладки, как на стороне Eclipse и на стороне "переводчика" (или "remote").

  • На стороне Eclipse экземпляр запуска/отладки представлен объектом IDebugTarget и его дочерними элементами (реализация - ваша ответственность); это создается LaunchDelegate и "прикрепляется" к удаленному запуску процесса во время запуска.

  • Удаленная сторона, интерпретатор или программа, которую вы на самом деле отлаживаете, может быть любой: двоичный исполняемый файл, perl script, некоторое приложение, работающее на некотором сайте (возможно, также локальная Java-программа, даже в этом случае это, вероятно, будет работать в собственной JVM, а не в отладке JVM Eclipse!). Ваш объект IDebugTarget должен знать, как связываться с "удаленным интерпретатором" (например, TCP) и выполнять типичные задачи отладчика (размещать точки останова, шаг, запускать, запрашивать переменные и т.д.), - но протокол здесь зависит от вас, он совершенно произволен.

  • То, что не является произвольным, - это иерархия ваших пользовательских классов, которые будет использовать отладчик Eclipse: они должны иметь IDebugTarget как root и должны реализовывать "модель отладки" (см. figure в статье). Как было сказано выше, объект IDebugTarget - это тот, кто понимает, как сделать перевод между стороной EClipse и удаленной стороной (см. этот образ)

Ответ 3

ok, я собираюсь добавить второй ответ здесь... Я думаю, что я недостаточно хорошо знаком с состоянием вашей среды, чтобы узнать, почему пользовательские детали форматировщиков не будут делать трюк. для большинства случаев я думаю, что они предоставят вам то, что вы ищете.

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

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

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