Program Counter [Resolvido]

Alguém sabe dizer como eu posso pegar o program counter de uma thread sendo executada, após uma determinada instrućão?

Ou ainda: pegar o program counter da própria jvm.

Isso é mais difícil que parece, e normalmente não é relevante. É que um determinado código pode em determinado momento estar sendo interpretado (nesse caso o “program counter” da CPU não faz muito sentido porque aponta para um endereço que está no interpretador do Java, ou seja, dentro de jvm.dll), e em outro momento ter sido compilado para código nativo. Mesmo quando foi compilado para código nativo, pode ser que a JVM resolva recompilar a mesma classe para um código nativo diferente em posição diferente na memória, depois de algum tempo, e uma determinada linha de programa no Java corresponderia a ainda outro “program counter” no código nativo.

Isso só é relevante para quem vai construir um debugger para o Java. E mesmo assim a JVM faz algumas mágicas para “esconder” o program counter - ela mostra o programa ao debugger como se ele estivesse sendo interpretado, mesmo que ele tenha sido compilado, o que é realmente uma grande mágica.

A intencão é instrumentar os bytecodes de uma aplicaćão para fazer checkpoint. Nas pesquisas, topei com essa história do pc register (program counter da JVM), mas nenhum dos artigos consultados explica o que é feito. Poderia me falar mais sobre esse jvm.dll .

Para efetuar instrumentação de uma aplicação, procure “java agent”:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/package-summary.html

Obrigada! A parte de como instrumentar nós já resolvemos. O problema é que para salvar o estado da aplicaćão, temos que salvar o program counter e nem temos a menor idéia de como fazer isso… :shock:

Puxa, agora não sei mesmo. Como é que vocês salvam o estado da aplicação? Vocês põem a aplicação em modo de depuração via JVMTI ou coisa parecida?

Na verdade nem nós sabemos…hehe. Hoje que nós comećamos a pensar nessa questão “o que salvar num checkpoint” e todos os artigos consultados falam em salvar o program counter, para que a jvm saiba de onde deve recomećar a executar o programa. Talvez estejamos até indo longe demais, ao querer pegar o program counter da jvm. Certamente é um assunto para mais algumas horas de pesquisa (e para uma boa conversa com nosso orientador). Obrigada pela atenćão!