Eclipse - o depurador não para no ponto de interrupção

96

Estou tentando atirar em um JUnit. No código-fonte, configurei o ponto de interrupção em dois lugares: 1) em uma linha onde um membro estático é inicializado 2) a primeira linha de um dos casos de teste.

O depurador para na linha de inicialização do campo estático. Mas isso não para no caso de teste. Não importa onde eu defina o ponto de interrupção no caso de teste, o depurador não para por aí. Tenho certeza de que o caso de teste foi executado, pois posso ver as mensagens de log que adicionei no log.

Qualquer ajuda seria muito apreciada.

Estou usando o Eclipse Galileo e o iniciador JUnit4.

Roy
fonte
1
Seu código está compilado com a opção -g ativada para gerar as informações de depuração no arquivo .class? Isso é obrigatório, é claro.
duffymo
Sim, é compilado com a opção -g.
Roy,
Você também pode adicionar informações sobre qual versão do JUnit e do JRE está usando? Acredito que isso seja útil neste contexto.
Vineet Reynolds,
A propósito, o JDK em uso é mais importante (existem alguns JDKs bagunçados que podem causar isso). Ignore a consulta sobre a versão do JUnit.
Vineet Reynolds,
Desculpe, eu deveria ter incluído isso. JDK 1.6 atualização 14.
Roy,

Respostas:

39

Isso pode estar relacionado a um dos bugs no JDK 6 Atualização 14, conforme indicado nas notas de lançamento do JDK 6 atualização 15 .

Se esse for realmente o problema, você deve migrar para uma versão superior do JDK (isso não é garantia, já que foram lançadas correções contra 6u16, 6u18 e 7b1 ). A melhor aposta é usar o sinalizador -XX: + UseParallelGC. Aumentar o tamanho do tamanho mínimo e máximo do heap, para atrasar o primeiro GC, traz um alívio temporário.

A propósito, use este relatório de bug no Eclipse para rastrear como os outros estão se saindo.

Vineet Reynolds
fonte
1
Fiz upgrade para a atualização 16 do JDK 1.6. Agora, ele para em todos os pontos de interrupção que defini. Muito obrigado por sua ajuda.
Roy,
De nada. O u16 parece ser o lançamento em que isso foi corrigido de forma suficientemente boa, apesar das notas de lançamento do u15.
Vineet Reynolds,
Obrigado @Vineet - Eu estava puxando meu cabelo por causa deste :-)
Jim Garrison
@VineetReynolds: Eu vi suas valiosas respostas relacionadas a Jboss e Java ee 6. você pode me ajudar a solucionar esse problema? stackoverflow.com/questions/28954323/…
tempestade cerebral de
96

A correção pode ser tão simples quanto clicar em executar / ignorar todos os pontos de interrupção. Funcionou para mim.

user1164035
fonte
3
Levei três dias para perceber que, de alguma forma, cliquei nisso
Henry
1
Obrigado ... devo ter clicado naquele ícone da barra de ferramentas por acidente de alguma forma :-P
kenyee
4
Obrigado ... não tenho ideia de quando isso foi clicado
njfife
1
Muito obrigado. Para outros usuários, nesta situação, se você fizer um ponto de interrupção, ele aparecerá cortado.
saurabheights
O mesmo aconteceu comigo. Eu nunca cliquei nele ... !! Versão: Mars Release (4.5.0) Build id: 20150621-1200
Beezer
52

Certifique-se, em Run> Debug Configurations, que 'Stop in main' está selecionado, se aplicável à sua situação.

Respondente
fonte
1
Certifique-se de ler as respostas anteriores antes de postar. O problema era a versão jvm deles .. e foi resolvido há três anos. Melhor não reviver tópicos antigos, a menos que sua resposta contribua com algo significativo, que ainda não foi abordado nas respostas anteriores.
Leigh
6
Obrigado. @Responda sua resposta resolveu meu problema. É estranho que "Stop in main" não tenha sido definido.
Yu Shen
25
Parece que a resposta dele contribuiu com algo significativo que ainda não foi abordado nas respostas anteriores :)
scubbo
Observe que esta é uma opção para aplicativos Java, mas não para aplicativos Android.
Noumenon
21

Normalmente, quando isso acontece comigo (raro, mas acontece) significa que o código que está sendo executado é diferente do código no editor. Ocorrerá de tempos em tempos para o Eclipse que as classes construídas e o código no editor estão fora de sincronia. Quando isso acontece, recebo todo tipo de comportamento estranho do depurador (depurando linhas vazias, pulando linhas de códigos, etc.).

Reiniciar o Eclipse, limpar todos os projetos e reconstruir tudo geralmente esclarece as coisas. Eu também tinha os plug-ins Maven (versões mais antigas ... há um tempo não tinham) que tendiam a fazer isso também.

Caso contrário, pode ser um bug, talvez aquele que Vineet declarou,

Espero que isto ajude

Newtopian
fonte
Sim, o que você afirmou acontece mais em IDEs que não recompilam código automaticamente. O Oracle JDeveloper (por experiência pessoal) e em menor medida (Netbeans) foi considerado insuficiente.
Vineet Reynolds,
1
Bom conselho. Não disse o suficiente. Às vezes, pensamos demais no problema e é apenas o sistema fora de sincronia. Tal como acontece com a reinicialização de um computador para solucionar problemas simples.
Xonatron
Obrigado, esse era o problema no meu caso. Parece estúpido, mas uma simples limpeza e F5 após uma construção fez o trabalho.
jfajunior
20

Você pode ter ignorado acidentalmente todos os pontos de interrupção na barra de ferramentas do Eclipse. Para corrigir isso, vá para Eclipse -> Executar -> Ignorar todos os pontos de interrupção.

Jigna.Shah
fonte
1
Arggh, há um atalho para isso também, eu provavelmente não verifiquei acidentalmente um item de menu, mas é provável que eu tenha pressionado Ctrl + Alt + B. Obrigado de qualquer forma.
Patru
3

Projeto -> Limpar pareceu funcionar para mim no JRE 8

JH95
fonte
2

Para que o depurador funcione com o remoto, os arquivos java .class devem ser compilados junto com as informações de depuração. Se a opção " -g: none " for passada para o compilador, o arquivo de classe não terá as informações necessárias e, portanto, o depurador não será capaz de combinar pontos de interrupção no código-fonte com aquela classe no remoto. Enquanto isso, se os arquivos jars / class forem ofuscados , eles também não terão nenhuma informação de depuração. De acordo com suas respostas, provavelmente este não é o seu caso, mas essas informações podem ser úteis para outras pessoas que enfrentam o mesmo problema.

Sergeyan
fonte
2

No meu caso, o problema era que eu não tinha a visualização de depuração aberta na perspectiva de depuração, então:

1 - Certifique-se de ter aberto a perspectiva de depuração:

o depurador eclipse não funciona 1

2 - Certifique-se de ter aberto a visualização de depuração:

depurador eclipse não funciona 2

Dani
fonte
2

Remova todos os pontos de interrupção e adicione-os novamente.

Raffi Khatchadourian
fonte
Isso consertou para mim. Esquisito. Thx
Atom999
1

Para JDK7, execute-> Configurações de Depuração, marque "Manter JUnit em execução após uma execução de teste durante a depuração".

Frank fu
fonte
1

Aconteceu comigo uma vez, quando desmarquei "Executar> Compilar automaticamente" e esqueci de verificar novamente.

Mathiouss
fonte
1

Certifique-se de declarar o pacote no topo. No meu código bacana, isso para nos pontos de interrupção:

package Pkg1

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

Isso não para nos pontos de interrupção:

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...
Don Harrington
fonte
Depois de lutar muito isso resolveu meu problema. Obrigado +1
Federico Piazza
0

Para remover os pontos de interrupção :

  1. Depure sua classe como um teste junit
  2. Quando o depurador parar, clique na guia "pontos de interrupção" ao lado de "variáveis" e "expressões"
  3. No canto superior direito da guia do ponto de interrupção, clique no botão com dois 'X'
  4. Pare o teste, substitua seu ponto de interrupção e execute o depurador novamente
Cyrois
fonte
0

Verifique também se os pontos de interrupção em outras linhas funcionam, pode ser um bug no depurador. Eu tive um problema com o depurador Eclipse onde colocar um ponto de interrupção em uma atribuição booleana cujo código estava na próxima linha não funcionou. Eu relatei isso aqui , mas colocá-lo na linha anterior ou seguinte funcionou.

Henno Vermeulen
fonte
0

Se nada funcionar-

  1. Remova essa configuração de depuração remota / local e crie uma nova.
  2. Adicione a fonte em configurações de depuração.
Kanaparthikiran
fonte
0

Outro possível problema é que a porta do depurador pode estar bloqueada pelo firewall. Por exemplo, eu estava usando o mule anypoint studio (v 5.4.3). A porta do depurador padrão é 6666. Quando um fluxo é executado, ele não para no ponto de interrupção. quando mudei a porta para outra (por exemplo, 8099), funcionou bem.

Exceção de tempo de execução
fonte
0

Acesse Right click->Debug Configuratione verifique se muitas instâncias de depuração foram criadas. Meu problema foi resolvido quando excluí várias instâncias de depuração da configuração e comecei a depurar recentemente.

priyanka_rao
fonte
0

Se você estiver no Eclipse,

Clique com o botão direito na pasta do seu projeto em "Package Explorer".

Vá para Fonte -> Limpe e escolha seu projeto.

Isso limpará qualquer bagunça e seu ponto de interrupção deve funcionar agora.

Sureshbabu E
fonte
0

Criar um novo espaço de trabalho funcionou para mim.

Ahmed Tawila
fonte
0

No meu caso, tive vários projetos no mesmo espaço de trabalho. O arquivo java que eu estava tentando depurar estava presente em mais de um projeto com o mesmo pacote.

Eu não precisava do outro projeto, então simplesmente fechei os projetos não relacionados (ou remova o arquivo do projeto não relacionado).

Shanu Gupta
fonte
0

Um comentário adicional sobre a resposta de Vineet Reynolds.

Eu descobri que eu tinha que definir -XX:+UseParallelGCemeclipse.ini

Eu configuro os argumentos da máquina virtual (vm) da seguinte maneira

-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M

que resolveu o problema.

Amir Pauker
fonte
-2

Isto é o que funciona para mim:

Tive que colocar o endereço do meu servidor local na configuração do PHP Server assim:

insira a descrição da imagem aqui

Nota : esse endereço é o que eu configuro no meu arquivo .conf do Apache .

Nota : o único breakpoint que estava funcionando era o 'Break at first line', depois disso, os breakpoints não funcionaram.

Nota : verifique seu xdebug propriedades do no arquivo php.ini e remova os que achar que não são necessários.

Francisco Corrales Morales
fonte
1
Não consigo ver como isso responde à pergunta (sobre JUnit e depuração de Java)
Newtopian