Pergunta

Eu queria saber se existe alguma coisa (no mundo Java) capaz de tirar um instantâneo do estado atual JVM com as seguintes características:

  • Faça-o enquanto uma exceção está sendo lançada.
  • Captura de variáveis ??locais, os argumentos de método, etc.
  • Coloque-o em um arquivo útil que pode ser usado para extrair ou reproduzir de um IDE a situação em seu código-fonte.

Os dois primeiros recursos são necessários (terceiro seria fantástico). E deve ser adequado para uso em produção (por isso, não há nenhuma maneira sobre depuradores).

Antes de pedir isso eu tenho procurado através do WWW (o maior tempo possível) e eu encontrei algumas dicas:

  • Cajoon Interceptor : Como disse em Dzone pós , é um agente de JVM passiva que cumprir os três requisitos! Mas, ele tem duas desvantagens:. Você deve pagar por ele e o site está em baixo (talvez não há nenhuma chance de pagar nada)
  • AviCode Intercept Estúdio : de Cajoon .NET equivalente. Só para dar alguns insights sobre.
  • JavaFrame : Ok, é um tweet, mas ele aponta para um repositório SVN disponíveis que tem o código fonte (sob licença MIT) de um agente de JVM que parece bem (Eu vou dar uma chance a ele).

Então, talvez eu estou procurando uma solução inexistente? Não é urgente, mas eu tive essa idéia para um projeto e seria ótimo para explorar esta "desconhecido" (?) Caminho e obter algo real.

Parece ser claro que seria um agente JVM (evento de exceção de JVMTI, por exemplo ).

Por fim, gostaria de destacar o parágrafo followin de da Wikipedia tratamento de exceção artigo :

Em tempo de execução motor de ambientes como Java ou .NET, existem ferramentas que anexar ao motor de tempo de execução e todos os vez que uma exceção de interesse ocorre, eles registram depuração informações que existia na memória o tempo a exceção foi lançada (Pilha de chamadas e os valores de pilha). Estes ferramentas são chamados Automated Exceção Manipulação ou erro ferramentas de intercepção e fornecer 'causa-raiz' informações para exceções.

Essa é a idéia. Espero que alguém pode me dar algumas dicas ou talvez, no futuro, alguém se inspirar por este post humilde:)

Obrigado!

Foi útil?

Solução

Eu dou uma olhada para JavaFrame e parece um bom ponto de partida. Basta instalar o Apache Ant, fazer ant no diretório javaframe e lançar o pacote de teste (dentro do diretório de teste) com:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test

Não existe nada variável local, mas ele tenta. Então, como eu disse, pode ser um ponto de partida. Espero conseguir mais sobre seu uso, mas não há tempo e nenhuma documentação (existem muitos projectos nomeados JavaFrame) são circunstâncias ruins.

Talvez algum dia isso pode ser feito novamente. Sim novamente. Houve Cajoon, parecia promissor e brilhante, mas seu site é baixo e não há qualquer vestígio de qualquer frasco para download para tentar.

Obrigado a todos!

PD .: Apenas para referência, alguns links que eu encontrei enquanto pesquisava:

Outras dicas

Você pode querer olhar para o trabalho que o NetBeans tem feito em relação a registro de uso automatizado: http: // wiki. netbeans.org/UsageLoggingSpecification .

Como para despejar as variáveis ??locais, eu imagino que você poderia simplesmente usar um depurador, como aquele que bajafresh4life mencionado.

Talvez isso poderia ser feito com AspectJ ?

Não sei se isso é viável em um ambiente de produção, mas não há o depurador Onisciente:

E se o seu depurador poderia ir "ir para trás no tempo?" Teria que fazer a depuração mais fácil? Por simplesmente gravar todas as atribuições de variáveis, é possível fazer essencialmente isso. Esta é a ideia subjacente para depuração onisciente. A parte surpreendente é que significativamente grandes programas podem ser depurado dessa forma - Ant, JUnit, o próprio depurador.

http://www.lambdacs.com/debugger/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top