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.


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.


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.


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.


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


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.


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


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.


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



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".


1

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


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
...

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

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.


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.

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.


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.


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.



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).


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.


-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.


1
Não consigo ver como isso responde à pergunta (sobre JUnit e depuração de Java)
Newtopian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.