2012-06-22 10 views
13

EDITAR: Debe haber alguna manera en que pueda abordar esto sin escribir un depurador completamente nuevo. Actualmente estoy buscando formas de construir sobre el depurador de Java existente. Si alguien tiene alguna idea sobre cómo obtener la información que el depurador de Java ya tiene (sobre marcos de pila, variables, datos brutos, etc.), sería realmente útil.Escribir un depurador de eclipse personalizado

-

Lo que estoy tratando de hacer es que tengo este marco/API basada en Java, y me gustaría escribir un plugin para Eclipse depurador que se adapta a mi marco. Aquí hay un ejemplo simple:

Tengo dos clases, una llamada alcance y una llamada variable. El alcance contiene un mapa de variables. El código está todo en Java, pero estoy usando esta relación de variable de ámbito casi como un nuevo idioma, y ​​me gustaría una pestaña de depuración variable que me brinde una lista de los ámbitos actualmente activos con las variables que están almacenadas actualmente dentro. Aquí hay un código:

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

Obviamente, esto es un ejemplo muy simple, pero me gustaría lograr algo similar a esto donde puedo conseguir una ventana de variables, establecer un punto de interrupción, y tienen una lista "depurador" fuera mis objetos de ámbito activo y los objetos variables dentro.

He estado tratando de leer y entender: http://www.eclipse.org/articles/Article-Debugger/how-to.html

y es bastante denso (así como extremadamente obsoleta), pero voy a tratar de tomar algún tiempo para entenderlo. Solo quería ver si alguien tenía recomendaciones de alto nivel sobre cómo abordar este tipo de problema, ya que tengo poca experiencia en el desarrollo de complementos en eclipse o en la creación de depuradores.

Gracias!

+0

Ese artículo es para agregar soporte para nuevos idiomas. ¿Por qué necesita modificar el depurador para una clase de Java? ¿No puede usar la ventana Variables para ver los objetos en el alcance actual y expandir para ver los contenidos (como VariableList)? – NoBugs

+0

¿Alguna razón por la que no solo hace que su marco JSR-233 sea compatible (scripting java)? –

Respuesta

3

de haber trabajado en el depurador EDC eclipse, que suena como escribiendo todo un depurador es no tanto lo que quieres

suena como mientras se ejecuta el depurador, usted tendrá acceso a los objetos que tienen las variables y alcances le interesa.

puede utilizar toString() en las clases mismos o usar formateadores detalle para mostrar una variación en la información que desea. la llamada toString() puede ser bastante detallada y anidarse en llamadas, mostrar matrices enteras, etc. Los formateadores de detalles también pueden ser bastante complejos.

ver http://www.robertwloch.net/2012/01/eclipse-tips-tricks-detail-formatter/. es la mejor de varias URL (no tengo ninguna asociación con el autor).

una vez que esté satisfecho con el resultado de los objetos Variable y Scope, debería poder agregar expresiones de reloj que siempre se mostrarán en la ventana de expresiones (por lo tanto, no tiene que depender de variables locales en la pila marco en el que puedes estar).

esto debería darle la lista de Variables y Ámbitos de su marco de trabajo que está siguiendo ... con suerte sin tener que escribir un plugin de depurador de eclipse completo para hacerlo.

+0

I second John: Formateadores de detalles realmente parecen las cosas que estás buscando. Son fáciles de implementar y probar, y deben proporcionar la mayoría de las cosas que necesita. –

6

No es una tarea fácil. Ese artículo sigue siendo la referencia principal, creo. Viejo, pero no anticuado. Intenta digerirlo, y preferiblemente para hacerlo funcionar. Antes, debes tener una experiencia mínima en el desarrollo de plugins de Eclipse.

Hay muchas piezas en la imagen, pero lo primero que debe entender es que cuando Eclipse está depurando algo (suponiendo que estamos usando el modelo de depuración estándar), tenemos dos "mundos" separados: el lado Eclipse, y el lado del intérprete (o, si lo prefiere, los lados "local" y "remoto").

Int el lado de Eclipse, la programación implica una cooperación entre algunas clases básicas de Eclipse y algunas clases de su propio, que se extienden o implementan algunas clases/interfaces de Eclipse:

  • A "launchConfigurationType" (punto de extensión en su plugin.xml) que causa la aparición de una nueva configuración personalizada al hacer clic en "Depurar como -> Nueva configuración", esto va junto con algunos "launchConfigurationTabGroups" definición que define los cuadros de diálogo "Tabs" que aparecerán en su configuración de inicio personalizada (eg) (cada pestaña tendrá su propia clase típicamente).

  • El launchConfigurationType se asocia típicamente a una clase LaunchDelegate, que es una especie de la clase de arranque: tiene la responsabilidad de crear e iniciar una ejecución/depuración ejemplo, tanto en el lado Eclipse y en el "intérprete" (o "remoto") lado.

  • En el lado de Eclipse, la instancia en ejecución/depuración está representado por un objetoIDebugTarget y sus hijos (la aplicación es su responsabilidad); esto es creado por LaunchDelegate y "conectado" al proceso que se ejecuta de forma remota en el momento del lanzamiento.

  • El lado remoto, el intérprete o programa que está depurando en realidad, puede ser cualquier cosa: un ejecutable binario, un script perl, alguna aplicación ejecutándose en algún sitio (quizás también un programa Java local, pero incluso en este caso, esto probablemente se ejecutará en su propia JVM, no en la depuración Eclipse JVM!). Su objeto IDebugTarget debe saber cómo comunicarse con el "intérprete remoto" (por ejemplo, mediante TCP) y realizar las tareas típicas de depurador (colocar puntos de interrupción, paso, ejecución, preguntar por variables, etc.), pero el protocolo depende de usted. es completamente arbitrario.

  • Lo que no es arbitraria es la jerarquía de clases personalizadas que utilizará el funcionamiento depurador de Eclipse: éstos deben tener una IDebugTarget como root, y deben implementar "El modelo de depuración" (ver figure en el artículo). Como se dijo anteriormente, el objeto IDebugTarget es que entienda cómo hacer la traducción entre el lado Eclipse y el lado remoto (ver this image)

+0

Entonces, si intento escribir un depurador basado en Java, entonces, similar al ejemplo en el artículo, mi "intérprete" (análogo al intérprete pda.pl) es la JVM. ¿Es así como se depura el código Java normal, como en, también utilizan este modelo donde hay un control remoto y un local y hay 2 JVM uno que ejecuta el depurador y otro que ejecuta el programa que se depura? – KWJ2104

+0

No estoy seguro de su intención, pero, en general, respondería que sí. Y así es como Eclipse mismo depura un programa Java, inicia una JVM diferente y se conecta a través de TCP/IP http://wiki.eclipse.org/Debug_FAQ#I_can_run_a_program_but_not_debug_it.3F.3F.3F – leonbloy

0

ok, voy a agregar una segunda respuesta aquí ... supongo que no estoy lo suficientemente familiarizado con el estado de su entorno para saber por qué los formateadores de detalles personalizados no funcionarían. en la mayoría de los casos, creo que te proporcionarán lo que estás buscando.

, pero si realmente está interesado en crear otra vista que contenga estos elementos, puede consultar eclipse jdt project. Es muy posible que los puntos de extensión proporcionados le den acceso a las variables internas y la información del marco de pila que está buscando agregar, y también quizás alguna interfaz de usuario que facilitará su trabajo.

en otras palabras, es posible que no tenga que escribir un complemento de depurador completamente nuevo, pero tal vez un complemento que pueda funcionar junto con jdt.

el sitio tiene sugerencias para el plan de proyecto, repositorios de origen, la base de datos de seguimiento de problemas de bugzilla (se usa tanto para el seguimiento de errores como para la discusión de nuevas funciones).quizás algunos de los expertos en jdt puedan ayudar con sus opiniones sobre lo que mejor se adapte a sus necesidades.

Cuestiones relacionadas