Depuração de java do Eclipse: fonte não encontrada

179

Ao depurar um aplicativo java no eclipse, recebo o erro " Origem não encontrada " em dois casos:

  • Entrando em um arquivo em um projeto diferente que já foi importado
  • Entrando em um arquivo em um repositório maven instalado

Os arquivos estão lá, mas o eclipse não entra neles, mas mostra um botão para " anexar fonte "

Tentei anexar (que abriu uma caixa de diálogo para definir uma variável ?!) e o eclipse pulou para o arquivo, mas o depurador não pôde inspecionar nenhuma variável lá. Também anexar manualmente a fonte de cada dependência não é prático, pois no meu caso existem milhares de arquivos de dependência.

Eu sou novo em eclipse \ java, portanto, uma explicação de por que isso está acontecendo + como resolver isso ajudaria muito!

Jonathan
fonte

Respostas:

53

A depuração do Eclipse funciona com a classe realmente carregada pelo programa.

Os sintomas que você descreve parecem que a classe em questão não foi encontrada no projeto, mas em um jar de distribuição sem informações de depuração encontradas antes do projeto em que você está trabalhando.

Isso pode acontecer por vários motivos, mas verifique o local em que as classes que mostram esse comportamento são encontradas (consulte o painel de navegação para identificá-lo). Provavelmente, você precisará alterar o caminho de construção do projeto para evitar o uso deste jar e fazer com que a JVM use o projeto.

EDIT: Observe que, a partir de 2018, é comum usar uma estrutura de construção como o Maven, onde o caminho da construção é gerenciado pelo plug-in m2e, portanto esse problema deve ser muito menos frequente do que quando a pergunta foi feita. Se você usar o Maven e o m2e, ative Preferences / Maven / "Download Artifact Sources" ou clique com o botão direito do mouse no projeto, Maven / "Download Sources".

Thorbjørn Ravn Andersen
fonte
oi obrigado por tudo, mas eu achei esta resposta mais útil (pilha de mais de referência do fluxo) [ stackoverflow.com/questions/5815013/...
shareef
11
@ shareef esse link é sobre falta de javadoc, não falta de fonte.
Thorbjørn Ravn Andersen
@ ACV Bem, sim. Talvez não seja tão elaborado quanto você gostaria - você poderia me dizer o que gostaria de ter explicado melhor?
Thorbjørn Ravn Andersen
a resposta é outra maneira de dizer: o problema é "fonte não encontrado", e minha sugestão é "tentar encontrar a fonte"
Junchen Liu
1
@dhein Considere abrir uma nova pergunta com muito mais detalhes.
Thorbjørn Ravn Andersen
301

Apenas 3 etapas para configurar o Eclipse IDE:

Nota: Após atualizar os caminhos de pesquisa de origem, você precisará parar e reiniciar sua sessão de depuração. Caso contrário, o arquivo com a fonte ausente continuará mostrando "fonte ausente".

Editar pesquisa de origem Selecione o comando Editar pesquisa de origem ... [Editar pesquisa de origem] para abrir a caixa de diálogo Caminho de origem, que permite fazer alterações no caminho de pesquisa de origem do destino de depuração selecionado.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

IMPORTANTE Reinicie o Eclipse após esta última etapa.

Douglas Frari
fonte
7
Editar a pesquisa de origem realmente funcionou para mim. Obrigado Douglas Frari
stephen ebichondo
3
Funciona como um encanto. Obrigado!
Carlos Spohr
11
e se mesmo isso não funcionar ... porque não está funcionando para mim
Saras Arya
11
Importante!! Funcionou bem, mas somente depois que eu parei o aplicativo em execução e o reiniciei. Até que fiz isso, parecia que ainda não conseguia obter as fontes.
Jeach
1
Eu tenho lidado com isso dentro e fora por meses. Isso funcionou perfeitamente.
aCarella
45

Os sintomas descrevem perfeitamente o caso em que a classe encontrada não tem uma fonte associada (ou atribuída).

  • É possível associar as origens das classes JDK em Preferências> Java> JRE instalado . Se o JRE (não o JDK) for detectado como o JRE padrão a ser usado, suas classes do JDK não terão fontes anexadas. Observe que nem todas as classes do JDK forneceram fontes, algumas delas são distribuídas apenas na forma binária.
  • Classes do caminho de construção do projeto, adicionadas manualmente, requerem que você anexe manualmente a fonte associada. A fonte pode residir em um arquivo zip ou jar, na área de trabalho ou no sistema de arquivos. O Eclipse fará a varredura do zip, para que suas fontes não precisem estar na raiz do arquivo morto, por exemplo.
  • Classes, de dependências provenientes de outros plugins (maven, PDE, etc.). Nesse caso, cabe ao plug-in como a fonte será fornecida.
    • O PDE exigirá que cada plug-in tenha o pacote XXX.source correspondente , que contém a fonte do plug-in. Mais informações podem ser encontradas aqui e aqui .
    • O m2eclipse pode buscar fontes e javadocs para dependências do Maven, se estiverem disponíveis. Esse recurso deve estar ativado nas preferências do m2eclipse (a opção foi denominada algo como " Download source and javadocs ".
    • Para outros plugins, você precisará consultar a documentação deles
  • As classes carregadas do seu projeto são correspondidas automaticamente com as fontes do projeto.

Mas e se o Eclipse ainda sugerir que você anexe a fonte, mesmo se eu definir corretamente minhas classes e suas fontes:

Isso quase sempre significa que o Eclipse está encontrando a classe de um lugar diferente do que você espera. Inspecione seu caminho de pesquisa de origem para ver onde ele pode obter a classe errada. Atualize o caminho de acordo com suas descobertas.

O Eclipse não encontra nada quando o ponto de interrupção é atingido:

Isso acontece quando o caminho de pesquisa de origem não contém a classe, que está carregada no momento no tempo de execução. Mesmo se a classe estiver na área de trabalho, ela poderá ficar invisível para a configuração de inicialização, porque o Eclipse segue o caminho de pesquisa de origem estritamente e anexa apenas as dependências do projeto, que está atualmente depurado.

Uma exceção são os pacotes de depuração no PDE . Nesse caso, como o tempo de execução é composto de vários projetos, que não precisam declarar dependências um do outro, o Eclipse encontrará automaticamente a classe na área de trabalho, mesmo que não esteja disponível no caminho de pesquisa de origem.

Não consigo ver as variáveis ​​quando atingi um ponto de interrupção ou ele apenas abre a fonte, mas não seleciona a linha do ponto de interrupção:

Isso significa que, no tempo de execução, a JVM ou as próprias classes não possuem as informações de depuração necessárias. Cada vez que as classes são compiladas, as informações de depuração podem ser anexadas. Para reduzir o espaço de armazenamento das classes, algumas vezes essas informações são omitidas, o que torna a depuração desse código um problema. Sua única chance é tentar recompilar com a depuração ativada.

O visualizador de origem do Eclipse mostra linhas diferentes daquelas que são realmente executadas:

Às vezes, pode mostrar que o espaço vazio também é executado. Isso significa que suas fontes não correspondem à sua versão de tempo de execução das classes. Mesmo se você acha que isso não é possível, é verdade, portanto, certifique-se de configurar as fontes corretas. Ou seu tempo de execução corresponde às alterações mais recentes, dependendo do que você está tentando fazer.

Danail Nachev
fonte
Excelente resposta! Um petisco ausente nesta resposta é específico para pacotes configuráveis ​​OSGi: O Eclipse pode encontrar a origem se um pacote configurável contiver OSGI-OPT / src e o pacote configurável estiver no caminho de construção do projeto Eclipse. Veja este outro item do stackoverflow para obter detalhes: stackoverflow.com/questions/9720483/…
buzz3791
Talvez você possa dar uma olhada nisso - já não tenho o que tentar .. #
displayname
Bom saber. Muita teoria, mas nenhuma solução prática.
MasterJoe2
11

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

"Ao executar no modo de depuração, clique com o botão direito do mouse no thread em execução (na guia threads) e selecione Editar pesquisa de código-fonte. Nesse momento, você poderá adicionar o projeto / jar necessário que contém seu código-fonte."

Adicionei meu projeto atual dessa maneira e resolveu meu problema

Vering
fonte
Eu tive que fazer isso na exibição Debug, lá em "Aplicativo Java remoto" ou "Java HotSpot VM".
Abdull
9

Eu tive um problema semelhante com o meu projeto eclipse maven. Eu lutei com esse problema há muito tempo e tentei reconstruir o projeto com

mvn clean eclipse:eclipse

e isso ajudou.

Nota: O uso desta abordagem confundirá o plugin m2e, pois as duas abordagens são muito diferentes. O m2e adiciona um nó virtual ao seu projeto chamado "Dependências do Maven" e pede ao Maven para adicionar todas as dependências lá.

mvn eclipse:eclipse, por outro lado, criará muitas entradas individuais no arquivo .classpath. O Eclipse os manipulará como se você incluísse JARs manualmente em seu projeto.

A menos que você saiba como o caminho de classe no Eclipse funciona, essa abordagem não é recomendada.

krzysiek.ste
fonte
Só isso funciona para mim também! mvn eclipse:eclipseadicione dependência do projeto ao caminho de construção do java, para que funcione. Além disso, o plugin m2eclipse adicionará a dependência do projeto apenas em "Maven Dependencies", que está na guia Libraries e o depurador não consegue encontrar.
ingênuo
Não sei o que aconteceu, mas depois de executar isso, não vejo mais minhas dependências inventadas em "Dependências do Maven".
displayname
6

Remova a configuração de depuração existente e crie uma nova. Isso deve resolver o problema.

Rajneesh Sekharmantri
fonte
Eu segui isso e funcionou. Possivelmente porque também adicionei a pasta do projeto java desejada na guia 'Origem' da nova configuração de execução / depuração. Talvez apenas adicionar a pasta / projeto de origem ausente à guia 'Origem' da configuração de execução / depuração existente possa funcionar sem a necessidade de excluí-la primeiro.
Xilef
6

Eu estava enfrentando o mesmo problema, segui os passos abaixo.

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

insira a descrição da imagem aqui

Você vê na tela acima Jre1.8.0_12está selecionada.

selecione o JRE que você está usando e clique em Edit. Agora você deve ver a tela abaixo.

insira a descrição da imagem aqui

Clique no diretório, procure Jdk, ele deve se parecer com a tela abaixo. insira a descrição da imagem aqui

clique ok e pronto

Varun
fonte
Use essa abordagem se Eclipse não pode carregar classes de tempo de execução Java (qualquer classe onde o nome completo do tipo começa com java.como java.lang.String)
Aaron Digulla
4

Eu tive o problema de que meu Eclipse não estava depurando o código fonte do meu projeto. Eu estava recebendo uma página em branco com "Nó do código fonte encontrado".

Por favor, clique no botão Anexar código fonte. Em seguida, exclua a pasta "padrão", clique em adicionar e vá para o local do projeto e anexe. Isso funcionou para mim

um vaso
fonte
3

No meu caso, mesmo após editar a pesquisa de origem e adicionar o projeto, não funcionou. Eu configurei o caminho de compilação do projeto.

insira a descrição da imagem aqui

Depois disso, selecionei a Biblioteca do Sistema JRE e funcionou.

insira a descrição da imagem aqui

Germa Vinsmoke
fonte
2

Evidentemente, o Eclipse não sabe automaticamente onde está o código fonte dos jars dependentes. Não está claro por que o depurador não pôde inspecionar variáveis ​​depois que a fonte foi anexada. Uma possibilidade é uma fonte incorreta / incompatível.

Supondo que você tenha um projeto maven e que as fontes das dependências tenham sido baixadas e estejam disponíveis no repositório local, você pode instalar o m2eclipse , o plug-in maven eclipse e ver se isso ajuda a solucionar o problema.

Raghuram
fonte
1

Você pode ter o código fonte de uma dependência acessível ao Eclipse. Mas o Eclipse não sabe o código-fonte para o código que é carregado dinamicamente. Por exemplo, através do Maven.

No caso do Maven, eu recomendo que você use o plugin run-jetty-run:

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

Como solução alternativa, você também pode se conectar a uma JVM em execução com o depurador e verá o código. Como alternativa, você pode usar o plugin Dynamic Source Lookup para Eclipse a partir daqui:

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

Infelizmente, isso não me ajudou, pois tem problemas com os caminhos do Windows com espaços.

Eu preenchi uma solicitação de aprimoramento no Eclipse Bugzilla e se você concorda que esse problema "A fonte não encontrada" deve desaparecer para sempre, vote aqui:

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

Obrigado!

Sasa

ssasa
fonte
Agora você tem meu apoio para esse bug!
Abdull 11/09/12
1

No meu caso, em "Attach Source", adicionei o outro diretório do projeto maven no painel "Source Attachment Configuration". Adicionar a versão mais recente do repositório m2 não funciona. Todas as classes do outro projeto maven não foram abertas.

insira a descrição da imagem aqui

Aqui teste foi o meu outro projeto maven contendo todas as fontes java.

Por sorte
fonte
1

Clique em -> Editar caminho de pesquisa de origem

depois então

Clique em -> Adicionar, finalmente, selecione o projeto Java e selecione o caminho do projeto.

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

Oguzhan Cevik
fonte
isso funcionou para mim!
Ishank 21/06
0

Eu tive o mesmo problema. No meu caso, desabilitei o Window-Preferences-Java-Debug [Suspender a execução em exceções não capturadas]. Então, o console me mostrou o erro correto: meu usuário do MySQL não tinha privilégios para acessar o banco de dados. De acordo com este tópico.

Alex
fonte
0

Informações: Essa é uma solução possível quando você usa o maven (pom.xml) em alguns projetos.

Se você estiver trabalhando com o maven, certifique-se de qual versão está usando dentro do pom.xml de acordo (por exemplo, 1.0.1-INSTANTÂNEO). Pode ser possível que seu código esteja atualizado, mas suas dependências do pom.xml ainda estão utilizando os JAR / Snapshots antigos (com o código antigo).

Encontrando o problema:

  • Tente depurar o arquivo de acordo.
  • Portanto, defina um ponto de interrupção na área de código relevante.
  • Quando "fonte não encontrada" aparecer, certifique-se de vincular o projeto certo (onde o arquivo .java pode ser encontrado).
  • O arquivo .class de compilação é aberto no editor IDE.
  • Clique em "Vincular ao Editor" para encontrar o JAR / Instantâneo correspondente.
  • Agora, verifique se esse JAR é o mais recente. Possivelmente existe um mais novo. Nesse caso, escreva o número da versão mais recente no pom.xml.
  • Em seguida, faça uma atualização maven e construa (por exemplo, "mvn clean install -U") no diretório correto do projeto.
Birol Efe
fonte
0

Se você estiver no eclipse ou no STS, instale e use o GC (GrepCode Plugin), algum tempo você não precisará anexar o arquivo .zip de origem ao caminho do projeto, para que o GrepCode funcione bem para você.

Daniel Adenew
fonte
0

Eu tive um problema relacionado à conexão com a depuração do servidor Glassfish no Eclipse. Isso foi causado pelo carregamento do código-fonte de um repositório diferente (mudando de SVN para GitHub). No processo, as classes compiladas incorretas foram usadas pelo servidor Glassfish e, portanto, o tempo de origem e de execução estaria fora de sincronia com os pontos de interrupção aparecendo nas linhas vazias.

Para resolver isso, renomeie ou exclua a pasta superior do diretório de classes e o Glassfish recriará toda a árvore de diretórios de classe, incluindo a atualização dos arquivos de classe com a versão compilada corretamente.

O diretório de classes está localizado em: / workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <seu aplicativo da web> / WEB-INF / classes

user3035873
fonte
0

No meu caso com projetos tomcat, verifiquei o projeto aqui: Janela - Preferências - Tomcat - Caminho de origem - Adicione projetos java ao caminho de origem

user3132194
fonte
0

No meu caso, a versão Maven do outro projeto referenciado não corresponde à versão do projeto de teste. Uma vez que eram iguais, o problema desapareceu.

Maarten
fonte
0

Ao executar no modo de depuração, clique em Editar pesquisa de origem depois de suspenso do encadeamento. Neste ponto, poderemos adicionar o projeto / jar necessário que contém seu código-fonte. Depois que adicionei meu projeto atual dessa maneira, resolvi o meu problema. obrigado

Ioga
fonte
0

Se você deseja anexar o código-fonte a qualquer JAR por download automático, tente usar este plugin do Eclipse Java Source Attacher

insira a descrição da imagem aqui

KrishPrabakar
fonte
0

Eu tive esse problema enquanto trabalhava no código java para processar um arquivo do Excel que contém um conjunto de dados e, em seguida, convertê-lo em um arquivo .csv, tentei respostas para este post, mas elas não funcionaram. o problema era os próprios arquivos jar. depois de baixar os arquivos jar necessários, um por um (versões mais antigas) e adicioná-los ao meu projeto, o erro "fonte não encontrada" desapareceu. talvez você possa verificar seus arquivos jar. espero que isso ajude.

simin
fonte
0

isso funcionou para mim

clique com o botão direito do mouse em projeto -> Propriedades -> Conjunto de Implantação -> adicione seu jar

TajnosAgentos
fonte
0

Acesse Configuração de depuração no eclipse e use a meta abaixo para executar seu aplicativo.

-Dmaven.surefire.debug

por exemplo

-Dmaven.surefire.debug exec: java

Vishvesh Phadnis
fonte
0

Bem, aqui está o que funcionou para mim. Eu tentei todas as soluções possíveis no StackOverflow que existiam. Tentei alterar meu local de origem no menu de depuração, instalei o plugin m2e Eclipse, mudei do Maven incorporado e instalei o run-jetty-run e nada funcionou. Agora, vou ressaltar que não estava tentando visualizar o código fonte de uma pessoa externa, só queria ver meu código PRÓPRIO, mas toda vez que "entrava" nos meus métodos que escrevi que estavam no MEU projeto, obtive o Erro "Origem agora encontrada".

Depois de finalmente perguntar a um especialista, meu problema foi que a primeira coisa que o Eclipse estava fazendo foi chamar um ClassLoader, que você pode ver na pilha de depuração. Tudo o que eu precisava fazer era F6 (passar por cima) e depois me levou de volta à minha ligação original e depois F5 (entrar). E lá estava o meu código. Suspiro ... uma solução tão simples, mas uma hora desperdiçada.

Chris C
fonte
0

Para iniciantes,

Existe a possibilidade de o arquivo jar fazer parte do projeto que você ainda não incluiu na área de trabalho do Eclipse.

Para isso, você precisa saber o nome do projeto do arquivo jar. Digamos, por exemplo, abc -18.0.0-SNAPSHOT.jar, significa que o projeto que você deve incluir no seu espaço de trabalho é abc .

Shobhit Mittal
fonte
0

Eu tive o mesmo problema com o eclipse 2019-03 (4.11.0) e só consegui resolver isso fazendo a depuração via depuração remota em vez de iniciá-la diretamente no modo de depuração.

Kai
fonte
0

Anexar fonte -> Adicionar -> Arquivo Externo -> selecione o jar -> aberto -> concluído

o problema é procurar o jar de fontes e anexá-lo.

por exemplo, o jar termina com "-sources" Stax2-api-3.4.1-sources

kranti
fonte
-1

Se você está tentando depurar seu projeto maven java e o eclipse não é capaz de encontrar sua fonte, tente um destes.

  1. Tente adicionar essas linhas no pom.xml
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

Tente maven-> update e depois depure

  1. Vá para o diretório raiz do projeto;

mvn eclipse: eclipse

agora tente depurar

Rajan
fonte
-1

No eclipse do fóton, tente desativar "Janela-> Preferências-> Java-> Depurar-> Usar pesquisa avançada de origem"

Editar: Há um bug relacionado nesta versão do eclipse que leva a uma mensagem "fonte não encontrada" durante a depuração de aplicativos Java. Consulte o relatório de erros bugs.eclipse.org/bugs/show_bug.cgi?id=537699 para obter mais detalhes

6pi
fonte
Ok, há um bug relacionado nesta versão do eclipse que leva a uma mensagem "fonte não encontrada" durante a depuração de aplicativos Java. Veja o relatório de bug bugs.eclipse.org/bugs/show_bug.cgi?id=537699 para obter mais detalhes
6pi