Como voltar ao depurador do Eclipse?


129

É possível executar a execução reversa no depurador do Eclipse? O projeto atual em que estou trabalhando requer um mínimo de 5 segundos para ler e inicializar dados de um arquivo antes que qualquer coisa possa ser feita. Se eu ultrapassar o depurador, preciso encerrar o programa e reiniciar, e isso leva um bom tempo.

Respostas:


136

Você pode usar o soltar do Eclipse para enquadrar comando inserir novamente o método atual a partir do topo. Mas ele não desenrola nenhuma alteração de estado que tenha ocorrido; portanto, pode não funcionar dependendo do tipo de método em que você está.

Outra ferramenta muito legal que realmente permite dar um passo à frente no tempo é o Omniscient Debugger . Ele funciona instrumentando as classes conforme elas são carregadas no carregador de classes, para que possa gravar tudo o que seu código faz. Pode fazer coisas muito legais, como responder "quando, onde e por que esse campo recebeu seu valor atual?". A interface do usuário é bastante desajeitada e pode ser difícil lidar com grandes bases de código, mas, em alguns casos, pode economizar muito tempo.

Atualização : o Chronon fornece um produto comercial que ele descreve como um "DVR para Java", que parece fazer as mesmas coisas que o ODB.


@ Matt McHenry Eu estava tentando usar o ODB1.5; com um programa java autônomo, mas não sei como fazê-lo funcionar? Você possui outros recursos além do site ODB que explicam as etapas para fazê-lo funcionar de forma independente e com o Eclipse?
precisa saber é o seguinte

@ Ayusman: não, desculpe, não tenho nada para compartilhar além do que está no site ODB. Não ficaria surpreso se ele não funcionar com os formatos de arquivo .class mais novos, entre outras coisas. :(
Matt McHenry

Resposta interessante!
KrishPrabakar

Parece que o site do Omnscient Debugger foi domíniosquatted.
Thorbjørn Ravn Andersen

45

Além do que foi mencionado nas respostas anteriores - ou seja, o recurso de queda no quadro do Eclipse na exibição de depuração , que reinicia a depuração mais cedo no quadro da pilha (mas não reverte os dados globais / estáticos) e o depurador Omniscient , que é um pouco bruto e não muito evoluindo - existem algumas ferramentas baseadas no Eclipse que podem ser usadas para "voltar" no tempo (de execução):

O JIVE estende o depurador Java do Eclipse com a capacidade de registrar os estados do programa. A perspectiva JIVE fornece alguns diagramas UML úteis que são atualizados enquanto o programa está em execução. Esses diagramas fornecem uma visão geral do estado do aplicativo (diagrama de objetos) e do rastreamento de pilha (diagrama de sequência). Você pode consultar o rastreamento memorizado e voltar e avançar no tempo e ver os diagramas correspondentes.

O Diver grava apenas chamadas de método e realmente não registra estados de programa como o JIVE. Todo evento de chamada de método é armazenado para recuperação e análise posteriores. Ele estende as configurações de Java Run and Debug principalmente para especificar filtros. O rastreamento pode ser pausado / retomado / filtrado em tempo de execução. Uma vez gravada, a perspectiva do Diver pode exibi-la em um diagrama de seqüência interativo.

JIVE e Diver são projetos de código aberto emitidos a partir de pesquisas acadêmicas. Em novembro de 2012, os dois projetos estão ativos.

O Chronon é um produto comercial, mas eles têm licenças gratuitas para estudantes e projetos de código aberto. Pelo que está sendo reivindicado em seu site, é provavelmente o gravador mais abrangente, pois é capaz de reproduzir o histórico gravado, avançar e retroceder, permitindo, como dizem, a depuração de viagens no tempo. O Eclipse também não é necessário para a gravação.

Todos esses plugins são bastante ambiciosos em recursos, portanto, é melhor ter uma boa máquina de especificações e usar seu recurso de filtro. Um requisito definido para executá-los com êxito é estender o espaço de heap no eclipse.ini .

No meu caso, tentei usar o JIVE e o Diver para depurar um programa de análise XML, mas sempre acabava congelando o eclipse devido à falta de recursos. O Diver pode ser complicado para rodar no Linux de 64 bits , ele funciona no ubuntu 32bit e possivelmente em outras distribuições de 32 bits usando essas dicas . O Diver funciona no Windows, melhor ainda em uma JVM do Windows de 64 bits + 64 bits, caso contrário, você estará limitado a um espaço de heap máximo de 1,3 a 1,6 Gb em janelas de 32 bits . O JIVE funciona muito bem no meu Linux de 64 bits e parece funcionar bem em outras plataformas.


O Diver foi descontinuado
merours

12

Sim , o Eclipse CDT oferece suporte ao recurso histórico do depurador.

Abra Configuração de depuração -> Depurador -> Ativar depuração reversa na inicialização .

Do que você pode pressionar shift+F5ou shift+F6para recuar como F5ou F6para recuar .


1
Esta opção existe em todas as versões do Eclipse? Estou preocupado se eu posso encontrá-lo em qualquer lugar.
EngineerBetter_DJ

1
Seu recurso do GDB sourceware.org/gdb/wiki/ReverseDebug que é suportado no Eclipse por esta solicitação de bugs.eclipse.org/bugs/show_bug.cgi?id=258284 . Bem, eu resposta supõem é sim desde 2009.
Sergei

É acessível no CDT.
Sergei

Sou desenvolvedor Java, então acho que o CDT não será muito útil para mim?
EngineerBetter_DJ

@Sergei Estou fazendo isso no Windows 7 SP1 com uma versão antiga do Springsource. Para habilitar a depuração reversa, você deve primeiro depurar como-> Configurações de Depuração-> Principal. Na parte inferior da página está o iniciador de processos. Ele diz "Usando o Standard Create Process Launcher" e haverá um hiperlink para "Selecionar outro ...". Clique aqui e verifique se "Usar definições específicas da configuração" está marcado, selecione "Criar Process Launcher do GDB (GSF)" e clique em OK. "Usando o GDB (GSF) Create Process Launcher" agora será exibido na parte inferior da guia principal.
Sammy

5

Sou tendencioso, mas Chronon faz exatamente o que você está procurando.

O Drop to Frame não está exatamente voltando atrás, pois se o método mudou alguma coisa no heap, ele não será revertido.


1
O Chronon permite que você faça isso em tempo real? Meu entendimento é que primeiro é necessário gravar uma sessão usando o chronon e, em seguida, você pode voltar atrás nessa sessão. Não é tão bom quanto reiniciar o aplicativo? Ou talvez eu estou faltando alguma coisa ..
Raam

2
sim, você precisa gravar seu aplicativo primeiro e depois pode depurá-lo a qualquer momento a partir da gravação. É diferente de reiniciar o aplicativo, pois você não precisa seguir todas as etapas para reproduzir o bug. Tudo o que você faz é gravar o bug uma vez e, em seguida, você pode vê-lo sempre que quiser depurar usando apenas a gravação. Você não precisa de nenhuma parte do ambiente original para reproduzir a gravação.
Pdeva

O Chronon funciona em ambiente docker? Meu eclise não está no local ..
Choi

3

Eu também estava procurando esse recurso no eclipse. Eu sei que o estúdio visual pode fazer isso. Na verdade, você pode arrastar o marcador de linha atual e soltar em qualquer lugar no código. Não tenho certeza se as alterações nas variáveis ​​podem ser desfeitas. Mas ainda assim é muito útil e economiza muito tempo. Eu tenho esperado por isso em eclipse por muito tempo.


1

A pergunta não especifica uma linguagem Eclipse, e muitas das respostas assumem Java.

Se você estiver usando C ++ e GCC com o depurador GDB, o Eclipse possui o Run->Move to Lineque faz o trabalho e funciona como a instrução Definir próximo do Visual Studio . Nesse caso, o Eclipse está usando o recurso que está no GDB.

Se estiver usando Java, não conheço uma maneira de fazê-lo com o Eclipse ou o Netbeans, embora outras respostas tenham sugerido plug-ins. O Eclipse possui o comando "drop to frame", que funciona para Java na minha versão (Juno SR1). Se eu modificar e salvar o código dentro de uma função no modo de depuração, a linha de execução se moverá automaticamente para o topo da função atual e eu posso continuar a partir daí. Não é o mesmo que especificar a linha, mas é alguma coisa.

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.