2011-12-08 12 views
5

Tengo mi propio archivo build.xml que consiste en pocos objetivos para compilar y ejecutar mi proyecto Java con Ant. Aquí está la parte correspondiente de éste:¿Cómo usar Netbeans para depurar el código compilado usando el build.xml personalizado de Ant?

<path id="libpath"> 
    <fileset dir="${lib.dir}" includes="**/*.jar" /> 
</path> 

<patternset id="resources"> 
    <include name="relative/path/to/resources/" /> 
</patternset> 

<path id="resourcespath"> 
    <fileset dir="${src.dir}"> 
     <patternset refid="resources" /> 
    </fileset> 
</path> 

<target name="compile"> 
    <mkdir dir="${build.dir}" /> 
    <mkdir dir="${classes.dir}" /> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="libpath" includeantruntime="false" debug="true" debuglevel="lines,vars,source" /> 
    <copy todir="${classes.dir}"> 
     <path refid="resourcespath" /> 
    </copy> 
</target> 

<target name="debug" depends="compile"> 
    <java fork="true" classname="${main-class}"> 
     <sysproperty key="java.library.path" path="${dist.dir}"/> 
     <classpath> 
      <pathelement location="${classes.dir}" /> 
      <path refid="libpath" /> 
     </classpath> 
    </java> 
</target> 

Todo lo que quiero hacer es depurar el código compilado en ${classes.dir} utilizando Netbeans ejecutando el objetivo de debugbuild.xml. Por el momento, este objetivo inicia la aplicación compilada sin dar la oportunidad de detenerse en los puntos de interrupción. Sé que Netbeans genera el archivo predeterminado build-impl.xml, pero este es demasiado grande y es difícil de entender para mí. Es por eso que quiero saber si es posible usar el IDE de Netbeans para depurar código Java compilado por Ant usando mi propio archivo build.xml.

También existe la pregunta similar en debugging Java code when using Ant script in Eclipse, pero como puedo ver, la solución propuesta es específica de Eclipse.

Respuesta

8

Método propuesto por Sergey funciona pero uno tiene que hacer las siguientes acciones cada vez para depurar un proyecto:

  1. Prensa depuración Proyecto Principal botón (Ctrl+F5), Netbeans esperará una Debbuger adjuntar;
  2. Elija "depuración"> "Acople depurador ..." desde el menú principal Netbeans, especifique los parámetros de depuración de aparecido de diálogo y pulse "OK" botón o seleccione Debbuger utilizado previamente en la lista desplegable de la depuración de la barra de herramientas botón (por ejemplo, Adjuntar a 5432);
  3. Depure su aplicación y luego ciérrela (Shift+F5 no terminará la aplicación como de costumbre, solo finalizará la sesión de depuración).

En mi opinión, la mejor manera de utilizar "Acople depurador ..." es elegir SocketListen conector:

  1. de realizar el paso 2 de la cadena de los pasos anteriores (seleccione Escuchar 5432) - el depurador esperará a que se inicie una aplicación (tenga en cuenta que la subopción jvmarg de server debe establecerse en n - consulte Remote Debugging FAQ).
  2. Presione Depurar proyecto principal botón (Ctrl+F5).
  3. Depure su aplicación y luego ciérrela o finalícela simultáneamente con la sesión de depuración presionando Shift+F5.

De todos modos, este método también es incómodo, especialmente si estaban acostumbrados a iniciar la depuración simplemente presionando Ctrl+F5 o presionando el botón de la barra de herramientas correspondiente. Elegir depurador requerido del menú desplegable cada vez es molesto.

Así que aquí está la mejor solución: inicie el depurador directamente desde el objetivo debug de Ant. En mi caso se parece a esto:

<target name="debug" depends="compile"> 
    <nbjpdastart addressproperty="jpda.address" name="MyProjectName" transport="dt_socket"> 
     <classpath> 
      <pathelement location="${classes.dir}" /> 
      <path refid="libpath" /> 
     </classpath> 
    </nbjpdastart> 
    <java fork="true" classname="${main-class}"> 
     <sysproperty key="java.library.path" path="${dist.dir}" /> 
     <classpath> 
      <pathelement location="${classes.dir}" /> 
      <path refid="libpath" /> 
     </classpath> 
     <jvmarg value="-Xdebug" /> 
     <jvmarg value="-Xnoagent" /> 
     <jvmarg value="-Djava.compiler=none" /> 
     <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}" /> 
    </java> 
</target> 

Para obtener más información, por favor, mira a Creating a Target to Debug Your Java SE Application

2

Los consejos del tema de Eclipse también le servirán.

  1. Use parámetros próxima JVM (agregarlos a la llamada de destino Java):

    <jvmarg value="-Xdebug" />
    <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432" />

  2. en NetBeans uso de Depuración> Adjuntar depurador con el puerto 5432

+0

Funciona, pero este método requiere acciones molestas a repetirse cada vez que quiera iniciar/detener la depuración. Ver mi información para los detalles. De todos modos, gracias por la respuesta. – Ezze

Cuestiones relacionadas