Запись пользовательского отладчика 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 или отладчиков.
Спасибо!
Ответы
Ответ 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, могут помочь взвесить свои мнения о том, что наилучшим образом соответствует вашим потребностям.