Eclipse java depuración: fuente no encontrada

179

Al depurar una aplicación de Java en eclipse, recibo el error " Fuente no encontrada " en dos casos:

  • Entrar a un archivo en un proyecto diferente que ya está importado
  • Entrar a un archivo en un repositorio maven instalado

Los archivos están allí, pero eclipse no entrará en ellos, sino que muestra un botón para " adjuntar fuente "

Intenté adjuntar (¿qué abrió un cuadro de diálogo para definir una variable?) Y eclipse saltó al archivo, pero el depurador no pudo inspeccionar ninguna variable allí. Además, adjuntar manualmente la fuente para cada dependencia no es práctico, ya que en mi caso hay miles de archivos de dependencia.

Soy nuevo en eclipse \ java, así que una explicación de por qué sucede esto + ¡cómo resolver esto ayudaría mucho!

Jonathan
fuente

Respuestas:

53

La depuración de Eclipse funciona con la clase realmente cargada por el programa.

Los síntomas que describe suenan como que la clase en cuestión no se encontró en el proyecto, sino en un contenedor de distribución sin información de depuración encontrada antes del proyecto con el que está trabajando.

Esto puede suceder por varias razones, pero eche un vistazo a la ubicación donde se encuentran las clases que muestran este comportamiento (busque en el panel de navegación para identificarlo). Lo más probable es que necesite cambiar la ruta de compilación del proyecto para evitar usar este jar y hacer que la JVM use el proyecto en su lugar.

EDITAR: tenga en cuenta que a partir de 2018 es común usar un marco de compilación como Maven, donde la ruta de compilación es administrada por el complemento m2e, por lo que este problema debería ser mucho menos frecuente que cuando se hizo la pregunta. Si utiliza Maven y m2e, asegúrese de habilitar Preferencias / Maven / "Descargar fuentes de artefactos" o haga clic con el botón derecho en el proyecto, Maven / "Descargar fuentes".

Thorbjørn Ravn Andersen
fuente
hola gracias por todo pero encontré esta respuesta más útil (stack over flow link) [ stackoverflow.com/questions/5815013/…
shareef
11
@shareef ese enlace trata sobre la falta de javadoc, no falta la fuente.
Thorbjørn Ravn Andersen
@ACV Bueno, sí. Quizás no sea tan elaborado como te gustaría: ¿podrías decirme qué te gustaría que te explicara mejor?
Thorbjørn Ravn Andersen
la respuesta es otra forma de decir: el problema es "fuente no encontrada", y mi sugerencia es "tratar de encontrar la fuente"
Junchen Liu
1
@dhein Considere abrir una nueva pregunta con mucho más detalle.
Thorbjørn Ravn Andersen
301

Solo 3 pasos para configurar Eclipse IDE:

Nota: Después de actualizar las rutas de búsqueda de origen, deberá detener y reiniciar su sesión de depuración. De lo contrario, el archivo con la fuente faltante continuará mostrando "fuente faltante".

Editar búsqueda de origen Seleccione el comando Editar búsqueda de origen ... [Editar búsqueda de origen] para abrir el cuadro de diálogo Ruta de origen, que le permite realizar cambios en la ruta de búsqueda de origen del destino de depuración seleccionado.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

IMPORTANTE Reinicie Eclipse después de este último paso.

Douglas Frari
fuente
77
Editar la Fuente de Búsqueda realmente funcionó para mí. Gracias Douglas Frari
stephen ebichondo
3
Funciona de maravilla. ¡Gracias!
Carlos Spohr
11
y qué pasa si incluso eso no funciona ... porque no funciona para mí
Saras Arya
11
¡¡Importante!! Funcionó bien, pero solo DESPUÉS de que detuve la aplicación en ejecución y la reinicié. Hasta que lo hice, parecía que todavía no podía obtener las fuentes.
Jeach
1
He estado lidiando con esto por meses. Esto funcionó perfectamente.
aCarella
45

Los síntomas describen perfectamente el caso cuando la clase encontrada no tiene una fuente asociada (o asignada).

  • Puede asociar las fuentes para las clases JDK en Preferencias> Java> JRE instalado . Si se detecta JRE (no JDK) como JRE predeterminado para ser utilizado, entonces sus clases JDK no tendrán fuentes adjuntas. Tenga en cuenta que no todas las clases JDK han proporcionado fuentes, algunas de ellas se distribuyen solo en forma binaria.
  • Las clases de la ruta de compilación del proyecto, agregadas manualmente, requieren que adjunte manualmente la fuente asociada. La fuente puede residir en un archivo zip o jar, en el espacio de trabajo o en el sistema de archivos. Eclipse escaneará el zip, por lo que sus fuentes no tienen que estar en la raíz del archivo, por ejemplo.
  • Clases, de dependencias provenientes de otros complementos (maven, PDE, etc.). En este caso, depende del complemento cómo se proporcionará la fuente.
    • PDE requerirá que cada complemento tenga el paquete XXX.source correspondiente , que contiene la fuente del complemento. Se puede encontrar más información aquí y aquí .
    • m2eclipse puede buscar fuentes y javadocs para las dependencias de Maven si están disponibles. Esta característica debe habilitar las preferencias de m2eclipse (la opción se denominó algo así como " Descargar código fuente y javadocs ".
    • Para otros complementos, deberá consultar su documentación
  • Las clases, que se cargan desde su proyecto, coinciden automáticamente con las fuentes del proyecto.

Pero, ¿qué pasa si Eclipse todavía sugiere que adjunte la fuente, incluso si configuro correctamente mis clases y sus fuentes:

Esto casi siempre significa que Eclipse está encontrando la clase desde un lugar diferente al esperado. Inspeccione su ruta de búsqueda de origen para ver dónde podría obtener la clase incorrecta. Actualice la ruta de acuerdo a sus hallazgos.

Eclipse no encuentra nada en absoluto, cuando se alcanza el punto de interrupción:

Esto sucede cuando la ruta de búsqueda de origen no contiene la clase, que actualmente está cargada en el tiempo de ejecución. Incluso si la clase está en el espacio de trabajo, puede ser invisible para la configuración de inicio, porque Eclipse sigue estrictamente la ruta de búsqueda de origen y solo vincula las dependencias del proyecto, que actualmente está depurado.

Una excepción son los paquetes de depuración en PDE . En este caso, debido a que el tiempo de ejecución se compone de múltiples proyectos, que no tienen que declarar dependencias entre sí, Eclipse encontrará automáticamente la clase en el espacio de trabajo, incluso si no está disponible en la ruta de búsqueda de origen.

No puedo ver las variables cuando alcanzo un punto de interrupción o simplemente abre la fuente, pero no selecciona la línea del punto de interrupción:

Esto significa que en el tiempo de ejecución, la JVM o las clases mismas no tienen la información de depuración necesaria. Cada vez que se compilan las clases, se puede adjuntar información de depuración. Para reducir el espacio de almacenamiento de las clases, a veces se omite esta información, lo que dificulta la depuración de dicho código. Su única oportunidad es intentar recompilar con la depuración habilitada.

El visor de origen de Eclipse muestra líneas diferentes a las que realmente se ejecutan:

A veces puede mostrar que el espacio vacío también se ejecuta. Esto significa que sus fuentes no coinciden con su versión en tiempo de ejecución de las clases. Incluso si cree que esto no es posible, lo es, así que asegúrese de configurar las fuentes correctas. O su tiempo de ejecución coincide con sus últimos cambios, dependiendo de lo que intente hacer.

Danail Nachev
fuente
Excelente respuesta! Un tidbit que falta en esta respuesta es específico de los paquetes OSGi: Eclipse puede encontrar la fuente si un paquete contiene OSGI-OPT / src y el paquete está en la ruta de compilación de un proyecto Eclipse. Vea este otro elemento de stackoverflow para más detalles: stackoverflow.com/questions/9720483/…
buzz3791
Tal vez puedas echarle un vistazo a esto : ya no tengo nada que probar ...
mostrar
Bueno saber. Mucha teoría, pero ninguna solución práctica.
MasterJoe2
11

De http://www.coderanch.com/t/587493/vc/Debugging-Eclipse-Source

"Cuando se ejecuta en modo de depuración, haga clic derecho en el hilo en ejecución (en la pestaña de hilos) y seleccione Editar búsqueda de origen. En este punto, debería poder agregar el proyecto / jar necesario que contiene su código fuente".

Agregué mi proyecto actual de esta manera, y resolvió mi problema

Vering
fuente
Tenía que hacer esto en la vista de depuración, debajo de "Aplicación Java remota" o "VM Java HotSpot".
Abdull
9

Tuve un problema similar con mi proyecto eclipse maven. Luché con este problema durante bastante tiempo y luego intenté reconstruir el proyecto con

mvn clean eclipse:eclipse

y ayudó

Nota: El uso de este enfoque confundirá el complemento m2e ya que los dos enfoques son muy diferentes. m2e agrega un nodo virtual a su proyecto llamado "Dependencias de Maven" y le pide a Maven que agregue todas las dependencias allí.

mvn eclipse:eclipse, por otro lado, creará muchas entradas individuales en el archivo .classpath. Eclipse los manejará como si agregara manualmente JAR a su proyecto.

A menos que sepa cómo funciona el classpath en Eclipse, no se recomienda este enfoque.

krzysiek.ste
fuente
¡Solo esto funciona para mí también! mvn eclipse:eclipseagregue dependencia del proyecto a la ruta de compilación de Java, para que funcione. Además, el complemento m2eclipse agregará la dependencia del proyecto solo en "Dependencias de Maven" que en la pestaña Bibliotecas, y el depurador no puede encontrar.
ingenuo
No sé qué pasó, pero después de ejecutar esto ya no veo mis dependencias de Maven en "Dependencias de Maven".
mostrar
6

Elimine la configuración de depuración existente y cree una nueva. Eso debería resolver el problema.

Rajneesh Sekharmantri
fuente
Seguí esto y funcionó. Posiblemente porque también agregué la carpeta de proyecto de Java deseada en la pestaña 'Fuente' de la nueva configuración de ejecución / depuración. Tal vez solo agregar la carpeta / proyecto fuente que falta a la pestaña 'Fuente' de la configuración de ejecución / depuración existente puede funcionar sin tener que eliminarlo primero.
xilef
6

Estaba enfrentando el mismo problema, seguí los siguientes pasos.

Window=> Preferences=> Java=> Installed JREs,

ingrese la descripción de la imagen aquí

Usted ve en la pantalla anterior Jre1.8.0_12está seleccionado.

seleccione el JRE que está utilizando y haga clic Edit. Ahora deberías ver la pantalla de abajo.

ingrese la descripción de la imagen aquí

Haga clic en el directorio, busque Jdk, debería verse debajo de la pantalla. ingrese la descripción de la imagen aquí

haga clic en Aceptar, y listo

Varun
fuente
Utilice este enfoque si Eclipse no puede cargar clases desde el tiempo de ejecución de Java (cualquier clase donde el nombre de tipo completo comience con java.like java.lang.String)
Aaron Digulla
4

Tuve el problema de que mi Eclipse no estaba depurando el código fuente de mi proyecto. Estaba recibiendo una página en blanco con "Nodo de código fuente encontrado".

Haga clic en el botón Adjuntar código fuente. Luego elimine la carpeta "predeterminada", luego haga clic en Agregar, vaya a la ubicación de su proyecto y adjunte. Esto funciono para mi

un jarrón
fuente
3

En mi caso, incluso después de editar la búsqueda de origen y agregar el proyecto, no funcionó. Configuré la ruta de compilación del proyecto.

ingrese la descripción de la imagen aquí

Después de eso, seleccioné JRE System Library y funcionó.

ingrese la descripción de la imagen aquí

Germa Vinsmoke
fuente
2

Evidentemente, Eclipse no sabe automáticamente dónde está el código fuente de los archivos jar dependientes. No está claro por qué el depurador no pudo inspeccionar las variables una vez que se adjuntó la fuente. Una posibilidad es la fuente incorrecta / incompatible.

Suponiendo que tiene un proyecto maven y que las fuentes de las dependencias están descargadas y disponibles en el repositorio local, puede instalar m2eclipse , el complemento maven eclipse y ver si eso ayuda a resolver su problema.

Raghuram
fuente
1

Es posible que tenga el código fuente de una dependencia accesible para Eclipse. Pero Eclipse no conoce el código fuente del código que se carga dinámicamente. Por ejemplo, a través de Maven.

En el caso de Maven, le recomiendo que use el complemento run-jetty-run:

http://code.google.com/p/run-jetty-run/

Como solución alternativa, también puede conectarse a una JVM en ejecución con el depurador y verá el código. Alternativamente, puede usar el complemento Dynamic Source Lookup para Eclipse desde aquí:

https://github.com/ifedorenko/com.ifedorenko.m2e.sourcelookup

Lamentablemente no me ayudó, ya que tiene problemas con las rutas de Windows con espacios.

He completado una solicitud de mejora en Eclipse Bugzilla y si está de acuerdo con que este problema "Fuente no encontrada" desaparezca para siempre, vote por él aquí:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=384065

¡Gracias!

Sasa

ssasa
fuente
¡Ahora tienes mi apoyo en este error!
Abdull
1

En mi caso en "Adjuntar fuente", agregué el otro directorio de proyectos maven en el panel "Configuración de adjuntos de fuente". Agregar la última versión jar del repositorio m2 no funciona. Todas las clases del otro proyecto maven no se pudieron abrir.

ingrese la descripción de la imagen aquí

Aquí la prueba fue mi otro proyecto Maven que contiene todas las fuentes de Java.

Suerte
fuente
1

Haga clic en -> Editar ruta de búsqueda de origen

después

Haga clic en -> Agregar, finalmente seleccione el proyecto Java y seleccione la ruta del proyecto.

Fuente: https://www.youtube.com/watch?v=IGIKPY6q1Qw

Oguzhan Cevik
fuente
eso funcionó para mí!
Ishank
0

Tuve el mismo problema. En mi caso, he deshabilitado Window-Preferences-Java-Debug [Suspender ejecución en excepciones no detectadas]. Luego, la consola me mostró el error correcto: mi usuario de MySql no tenía privilegios para acceder a la base de datos. De acuerdo a este tema.

Alex
fuente
0

Información: esta es una posible solución cuando utiliza maven (pom.xml) con un par de proyectos.

Si está trabajando con maven, asegúrese de qué versión está tomando dentro del pom.xml correspondiente (por ejemplo, 1.0.1-SNAPSHOT). Es posible que su código esté actualizado, pero sus dependencias de pom.xml todavía están tomando las antiguas JAR's / Snapshots (con el código antiguo).

Encontrando el problema:

  • Intenta depurar el archivo correspondiente.
  • Por lo tanto, establezca un punto de interrupción en el área de código relevante.
  • Cuando "fuente no encontrada" aparezca , asegúrese de vincular en el proyecto correcto (donde se puede encontrar el archivo .java).
  • El archivo de compilación .class se abre en el editor IDE.
  • Haga clic en "Enlace con el editor" para encontrar el JAR / Instantánea correspondiente.
  • Ahora asegúrese de que este JAR sea el más reciente. Posiblemente hay uno más nuevo. En ese caso, escriba el número de versión más reciente en pom.xml.
  • Luego realice una actualización y compilación de Maven (por ejemplo, "mvn clean install -U") en el directorio correcto del proyecto.
Birol Efe
fuente
0

Si está en eclipse o STS, instale y use GC (complemento GrepCode), en algún momento no necesita adjuntar el archivo .zip de origen a la ruta del proyecto para que GrepCode funcione bien para usted.

Daniel Adenew
fuente
0

He tenido un problema relacionado con la depuración del servidor Glassfish en Eclipse. Esto se logró cargando el código fuente desde un repositorio diferente (cambiando de SVN a GitHub). En el proceso, el servidor Glassfish utilizó las clases compiladas incorrectas y, por lo tanto, la fuente y el tiempo de ejecución no estarían sincronizados con los puntos de interrupción que aparecen en líneas vacías.

Para resolver esto, cambie el nombre o elimine la carpeta superior del directorio de clases y Glassfish recreará todo el árbol del directorio de clases, incluida la actualización de los archivos de clase con la versión compilada correctamente.

El directorio de clases se encuentra en: / workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <your Web Application> / WEB-INF / classes

usuario3035873
fuente
0

En mi caso con proyectos tomcat, he marcado el proyecto aquí: Ventana - Preferencias - Tomcat - Ruta de origen - Agregar proyectos de Java a la ruta de origen

usuario3132194
fuente
0

En mi caso, la versión Maven del otro proyecto referenciado no coincidía con la versión del proyecto de prueba. Una vez que fueron iguales, el problema desapareció.

maarten
fuente
0

Cuando se ejecuta en modo de depuración, haga clic en Editar búsqueda de origen después de suspenderlo del hilo. En este punto, deberíamos poder agregar el proyecto / jar necesario que contiene su código fuente. Después de agregar mi proyecto actual de esta manera, y resolvió mi problema. Gracias

Yoga
fuente
0

Si desea adjuntar el código fuente a cualquier JAR mediante descarga automática, intente usar este complemento Eclipse Java Source Attacher

ingrese la descripción de la imagen aquí

KrishPrabakar
fuente
0

Tuve este problema mientras trabajaba en el código de Java para realizar el proceso en un archivo de Excel que contenía un conjunto de datos, luego lo convertí a un archivo .csv, probé respuestas a esta publicación, pero no funcionaron. El problema eran los propios archivos jar. después de descargar los archivos jar necesarios uno por uno (versiones anteriores) y agregarlos a mi proyecto, el error "fuente no encontrada" desapareció. tal vez puedas revisar tus archivos jar. Espero que esto ayude.

simin
fuente
0

esto funcionó para mí

haga clic derecho en proyecto -> Propiedades -> Ensamblaje de implementación -> agregue su jar

TajnosAgentos
fuente
0

Vaya a Configuración de depuración en eclipse y use el siguiente objetivo para ejecutar su aplicación.

-Dmaven.surefire.debug

p.ej

-Dmaven.surefire.debug exec: java

Vishvesh Phadnis
fuente
0

Bueno, esto es lo que funcionó para mí. Probé todas las soluciones posibles en StackOverflow que había. Intenté cambiar mi ubicación de origen en el menú de depuración, instalé el complemento Eclipse m2e, cambié de Maven incrustado e instalé run-jetty-run y nada funcionó. Ahora, advierto que no estaba tratando de ver el código fuente de una persona externa, solo quería ver mi PROPIO código, pero cada vez que "intervenía" en mis métodos que escribí que estaban en MI proyecto, recibí el Error "Fuente ahora encontrada".

Después de finalmente preguntarle a un experto, mi problema fue que lo primero que hizo Eclipse fue llamar a un ClassLoader, que puede ver desde la pila de depuración. Todo lo que tenía que hacer era F6 (pasar) y luego me llevó de vuelta a mi llamada original y luego F5 (entrar). Y ahí estaba mi código. Suspiro ... una solución tan simple pero una hora perdida.

Chris C
fuente
0

Para principiantes,

Existe la posibilidad de que el archivo jar forme parte del proyecto que aún no ha incluido en el espacio de trabajo de Eclipse.

Para eso, necesita saber el nombre del proyecto del archivo jar. Digamos, por ejemplo, su abc -18.0.0-SNAPSHOT.jar, significa que el proyecto que debe incluir en su espacio de trabajo es abc .

Shobhit Mittal
fuente
0

Tuve el mismo problema con eclipse 2019-03 (4.11.0) y solo pude resolver esto haciendo la depuración a través de la depuración remota en lugar de iniciarlo directamente en modo de depuración.

Kai
fuente
0

Adjuntar fuente -> Agregar -> Archivo externo -> seleccione el jar -> abrir -> listo

el truco es buscar el jar de fuentes y adjuntar este jar.

por ejemplo, el jar finaliza con "-sources" Stax2-api-3.4.1-sources

kranti
fuente
-1

Si está intentando depurar su proyecto maven java y eclipse no puede encontrar su fuente, pruebe uno de estos.

  1. Intente agregar estas líneas en pom.xml
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

Prueba maven-> update y luego depura

  1. Vaya al directorio raíz del proyecto;

mvn eclipse: eclipse

ahora intenta depurar

Rajan
fuente
-1

En eclipse photon intente desactivar "Ventana-> Preferencias-> Java-> Depurar-> Usar búsqueda avanzada de fuente"

Editar: hay un error relacionado en esta versión de eclipse que conduce a un mensaje de "fuente no encontrada" al depurar aplicaciones Java. Consulte el informe de errores bugs.eclipse.org/bugs/show_bug.cgi?id=537699 para obtener más detalles.

6pi
fuente
Ok, hay un error relacionado en esta versión de eclipse que conduce a un mensaje de "fuente no encontrada" al depurar aplicaciones Java. Vea el informe de errores bugs.eclipse.org/bugs/show_bug.cgi?id=537699 para más detalles
6pi