Estou recebendo esse erro estranho no Eclipse ao tentar definir um ponto de interrupção.
Unable to insert breakpoint Absent Line Number Information
Marquei a caixa de seleção nas opções do compilador, mas sem sorte.
eclipse
debugging
breakpoints
chandrajeet
fonte
fonte
Respostas:
Eu tive a mesma mensagem de erro no Eclipse 3.4.1, SUN JVM1.6.0_07 conectado ao Tomcat 6.0 (executando no modo de depuração em uma máquina diferente, Sun JVM1.6.0_16, a conexão de depuração funcionou corretamente).
Janela -> Preferências -> Java -> Compilador -> Geração de arquivo de classe: "adicione atributos de número de linha ao arquivo de classe gerado" foi verificado. Eu fiz um limpo, recompile. Eu desmarquei, recompilei, verifiquei, recompilei. Garanti que o projeto usasse as configurações globais. Ainda a mesma mensagem.
Eu mudei para a construção de formigas, usando
Ainda assim, a mesma mensagem.
Não descobri o que causou essa mensagem e por que ela não desapareceu. Embora parecesse ter algo a ver com a sessão de depuração do Tomcat em execução: quando desconectada, a recompilação resolve o problema. Mas, ao conectar o depurador ao Tomcat ou ao definir novos pontos de interrupção durante uma sessão de depuração conectada, ele apareceu novamente.
No entanto, a mensagem estava errada : eu era capaz de depurar e definir pontos de interrupção, antes e durante a depuração (o javap -l também mostrava os números das linhas). Então, basta ignorá-lo :)
fonte
debug="true"
àjavac
tarefa doant
script de construção funcionou.fonte
Isso corrigiu meu problema:
fonte
Installed JREs
padrão éJDK
, em vez deJRE
Para questões relacionadas ao Spring , considere que, em alguns casos, ele gera classes "sem números de linha"; por exemplo, uma
@Service
classe anotada sem uma interface, adicione a interface e você poderá depurar. veja aqui um exemplo completo.O serviço acima terá uma interface gerada pela mola, causando "números de linhas ausentes". A adição de uma interface real resolve o problema de geração:
fonte
Eu tenho a resposta para esse problema do lado do BlackBerry SDK: por algum motivo, não importa quantas vezes eu alterei as opções no compilador, o arquivo de configurações subjacente não foi alterado.
Na pasta .settings do seu projeto, procure um arquivo chamado org.eclipse.jdt.core.prefs .
Lá você pode modificar as configurações manualmente:
edit: Além disso, notei que às vezes eu posso ignorar o alerta que o Eclipse dá, e ele ainda pára no local necessário ... curioso e curioso ... Coloquei isso no balde de coisas que aprendemos a lidar com ao trabalhar como dev.
fonte
Isso funcionou para mim:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
, todas as opções precisam serTrue
.debug="true"
na<javac>
tarefa build.xml .Debug
modofonte
Não sei se isso ainda é relevante, talvez outro marinheiro ache isso útil.
A mensagem aparece quando um arquivo de classe é compilado e os sinalizadores de depuração estão desativados.
No eclipse, você pode ativá-lo pelas opções mencionadas acima,
Janela -> Preferências -> Java -> Compilador -> Geração de arquivo de classe: "adicione atributos de número de linha ao arquivo de classe gerado"
Mas se você tiver um arquivo jar, obterá a saída compilada. Não há uma maneira fácil de corrigir esse problema.
Se você tiver acesso à fonte e usar ant para obter o arquivo jar, poderá modificar a tarefa ant da seguinte maneira.
Feliz depuração ..
ref: http://doc.sumy.ua/prog/Java/javanut/ch16_04.htm
fonte
Eu tentei quase todas as soluções aqui e sem sorte. Você tentou clicar em "Não me diga novamente"? Depois disso, reiniciei meu programa e tudo estava bem. O Eclipse atingiu meu ponto de interrupção como se nada estivesse errado.
A causa principal para mim foi que o Eclipse estava tentando configurar a depuração para objetos de proxy Spring CGLIB gerados automaticamente. A menos que você precise depurar algo nesse nível, ignore o problema.
fonte
Ajudaria se você indicasse a versão do eclipse que está usando e a tecnologia (Java JDT ou AJDT para Aspect Java ou C ++ CDT por exemplo), apenas para ter certeza.
No lado do Java, acho que o seu "Marquei a caixa de opções do compilador" refere-se a este
Em "
Window --> Preferences --> Java --> Compiler --> Classfile Generation
", todas asClass file
opções de geração ' ' são definidas como True:O seu projeto tem as verificadas apenas no nível global (Preferências do Windows) ou no nível específico do projeto?
E você tem certeza de que a classe foi aberta (na qual você tenta definir um ponto de interrupção):
.java
, não um.class
?Tente limpar tudo e reconstruir tudo, verifique possíveis conflitos no jar .
fonte
Eu tive esse problema ao tentar iniciar o Tomcat no modo de depuração do Eclipse. Eu tinha um arquivo de compilação ANT cuidando da compilação e implantação. Depois de definir o sinalizador de depuração como true (como mencionado em outras respostas) e reimplementar o aplicativo, ele funcionou bem:
NOTA: se você acabou de adicionar o sinalizador de depuração e recompilar, ainda precisará reimplementar seu aplicativo no servidor, pois é aqui que o Eclipse está depurando os arquivos de classe. Muito óbvio, mas fácil de gastar uma hora ou mais, coçando a cabeça e se perguntando por que não está funcionando (acredite em mim).
fonte
tente alterar o que
jre
você usa. Definajre
na pasta emJDK
vez disso.fonte
Como tenho 6 versões diferentes do Java instaladas, tive que alterar minha conformidade JDK padrão para corresponder à versão Java que desejava usar. Por padrão, o Eclipse tinha o nível de conformidade do compilador definido como Java 1.7 quando tudo foi construído / compilado usando o Java 1.6.
Então tudo que eu fiz foi
Agora, o Eclipse não se queixa mais da "Não é possível inserir informações sobre o número de linhas ausentes do ponto de interrupção" e os pontos de interrupção de depuração realmente funcionam !!!
fonte
Se nada mais funcionar, abra a perspectiva de depuração, limpe todos os pontos de interrupção existentes e configure-os novamente.
fonte
Isso é explicado em detalhes aqui:
https://github.com/spring-projects/spring-ide/issues/78
Apenas para referência futura, esta é a parte relevante da resposta (ignore o fato de se referir a um aplicativo Spring Boot, o comportamento é o mesmo para muitos outros casos):
fonte
Minha situação era semelhante:
spyTask = spy(new Task())
Task.java
)Esse ponto de interrupção gera o erro em questão, toda vez que corro
Debug As... > JUnit Test
Para resolver o problema, mudei o ponto de interrupção para cima no teste real (dentro de TaskTest.java). Depois que a execução foi interrompida, adicionei o ponto de interrupção de volta onde estava, originalmente (dentro de Task.java).
Ainda recebi o mesmo erro, mas depois de clicar em "ok", o ponto de interrupção funcionou perfeitamente.
Espero que ajude alguém,
-gmale
fonte
Eu tive o mesmo problema ao fazer no servidor jetty e compilar novo arquivo .war pela ANT. Você deve criar a mesma versão do compilador jdk / jre e o caminho da construção (por exemplo, jdk 1.6v33, jdk 1.7, ....) depois de definir o Java Compiler como foi escrito anteriormente.
Fiz tudo e ainda não funcionei. A solução foi excluir os arquivos .class compilados e o destino do arquivo war gerado e agora está funcionando :)
fonte
Recebi esta mensagem com o Spring AOP (parece estar vindo da biblioteca CGLIB). Clicar em Ignorar parece funcionar bem, ainda posso depurar.
fonte
Encontrei mais um motivo para esta mensagem. Eu estava programando Scala. A solução foi:
Agora a depuração deve funcionar. Observe que eu instalei o plug-in Scala IDE, esta opção pode não estar disponível se você não o tiver.
fonte
Acima as coisas não funcionaram para mim. As soluções abaixo finalmente funcionaram. Configurações de depuração -> Caminho da classe -> Entradas do usuário -> (Adicione a pasta src do projeto que você deseja depurar.)
fonte
Eu tive esse mesmo problema ao depurar um WAR (construído a partir de vários artefatos do projeto Eclipse) implementado no Tomcat.
Estou construindo tudo usando um script de compilação ANT. Se é isso que você está fazendo, verifique se o sinalizador debug = true está definido em todas as tarefas javac ant que você possui. Este foi o meu único problema - espero que ajude o seu problema!
fonte
Eu tive o mesmo erro com o JBoss 7.1. E fiz o mesmo que o Zefiro. Apenas ignorei o erro e consegui colocar pontos de interrupção normalmente. No meu caso, eu estava construindo o pensamento form construtor e esta é a minha tarefa javac:
fonte
Eu tive o mesmo problema, gastei muito tempo procurando soluções, mas essas soluções são inúteis. Portanto, estudo todos os casos e finalmente descobri que há um conflito entre as versões do JDK. Abaixo estão as etapas para resolver o problema: 1. Remova todas as versões do JDK e JRE, mantenha apenas uma versão. 2. Configure o sistema JAVA_HOME e o compilador java no Eclipse é o mesmo. Em alguns casos, o erro acima não desaparecerá, mas poderemos executar no modelo de depuração.
fonte
Depois que experimentei o mesmo erro quando usei junit e Mockito, esqueci de adicionar
@PrepareForTest
uma classe estática.Adicionar código abaixo corrigiu meu problema.
Não tenho certeza se foi o mesmo caso.
fonte
Meu problema era que eu tinha dois JARs e estava tentando substituir um pelo outro com base em sua ordem no
Java Build Path => Order & Export
guia no Eclipse, porque um era para depuração e o outro não (o JAR de depuração sendo o primeiro no pedido). Quando fiz dessa maneira, tive que anexar manualmente uma fonte.Tentei remover o JAR sem depuração e colocá-lo no meu diretório \ WEB-INF \ lib \, limpeza, construção, etc., e funcionou. Desta vez (após remover a fonte anexada), ele automaticamente me deixaria navegar pelo código de depuração, sem precisar anexar nenhuma fonte manualmente. Pontos de interrupção e depuração também funcionaram.
Caso alguém ainda esteja tendo problemas, também tentei todas essas soluções específicas mencionadas nas outras respostas:
Add line number attributes...
org.eclipse.jdt.core.prefs
conforme mencionado em outra resposta: https://stackoverflow.com/a/31588700/1599699Também fiz o desligamento usual do servidor (e certifico-me de que o java.exe esteja realmente fechado ...), excluindo os diretórios \ build \ nos dois projetos, reiniciando o Eclipse com o parâmetro -clean, recriando o JAR de depuração, atualizando, limpeza e construção do projeto com o JAR de depuração, iniciando o servidor no modo de depuração, publicação / limpeza e ponto de interrupção.
fonte
Fiz tudo o que está listado acima ao compilar / construir os frascos - ainda tinha o mesmo problema.
Eventualmente, as alterações do jvmarg listadas abaixo ao iniciar o servidor é o que finalmente funcionou para mim:
1) Removido / Comentado um monte de jvm args pertencentes a javaagent e bootclasspath.
2) Ativou / não comentou a seguinte linha:
Então, quando inicio o servidor, sou capaz de atingir meus pontos de interrupção. Eu suspeito que o javaagent estava de alguma forma interferindo na capacidade do Eclipse de detectar números de linha.
fonte
Verifique / faça o seguinte:
1) Em "Janela -> Preferências -> Java -> Compilador -> Geração de arquivo de classe", todas as opções devem ser True:
2) Na pasta .settings do seu projeto, procure um arquivo chamado org.eclipse.jdt.core.prefs. Verifique ou configure org.eclipse.jdt.core.compiler.debug.lineNumber = generate
3) Se a janela de erro ainda aparecer, clique na caixa de seleção para não exibir a mensagem de erro.
4) Limpe e construa o projeto. Inicie a depuração.
Normalmente, a janela de erro não é mais exibida e as informações de depuração são exibidas corretamente.
fonte
Também encontrei esse problema. Estou usando um script de construção de formiga. Estou trabalhando em um aplicativo herdado, então estou usando o jdk versão 1.4.2. Isso costumava funcionar, então comecei a olhar em volta. Percebi que, na configuração Debug na guia JRE, a versão do Java havia sido definida como 1.7. Depois que eu mudei de volta para 1.4, funcionou.
Eu espero que isso ajude.
fonte
Eu estava tentando depurar o gerenciador de logs e precisava alterar o jre para um jdk e depois selecioná-lo na guia "principal", "Java Runtime Environment" | "tempo de execução JRE" da configuração de depuração, tudo estava bem.
fonte
Eu vi esse problema quando anotei uma classe com @ManagedBean (javax.annotation.ManagedBean). A mensagem de aviso surgiu ao executar o aplicativo recém-compatível no JBoss EAP 6.2.0. Ignorá-lo e executar de qualquer maneira não ajudou - o ponto de interrupção nunca foi atingido.
Eu estava chamando esse bean usando EL em uma página JSF. Agora ... é possível que o @ManagedBean não seja bom para isso (sou novo no CDI). Quando alterei minha anotação para @Model, meu bean foi executado, mas o aviso de ponto de interrupção também desapareceu e eu atingi o ponto de interrupção conforme o esperado.
Em resumo, certamente parecia que a anotação @ManagedBean atrapalhava os números das linhas, independentemente de ser a anotação errada a ser usada.
fonte
Verifique se o projeto em que a classe principal do tempo de execução está é o mesmo em que classe você possui pontos de interrupção . Caso contrário, verifique se os dois projetos estão no caminho de classe da configuração de execução e apareçam antes de quaisquer jars e pastas de classe.
fonte