Como obter o texto de um rastreamento de pilha de exceção em Java ME?

votos
7

Em Java regular, você pode obter o texto de um rastreamento de pilha, passando um PrintWriter para printStackTrace. Eu tenho um sentimento que eu sei a resposta a isso (ou seja, Não), mas,

Existe alguma maneira de obter o texto de um rastreamento de pilha em JavaME como uma String?

Atualizar:

Devo mencionar que eu estou restrito a CLDC 1.0

Publicado 22/10/2008 em 13:08
fonte usuário
Em outras línguas...                            


5 respostas

votos
3

duas soluções:

  • reproduzir a exceção no emulador. o kit de ferramentas sem fio e Netbeans irá imprimir rastreamentos de pilha em seu computador.

  • usar um dispositivo Symbian.

Antes do Feature Pack 2 da série 60 3ª edição, aparelhos Symbian usar a máquina virtual java Sun Hotspot. Foi adaptado para Symbian ligando-o a uma aplicação parcial de biblioteca padrão C.

Isto permitiu Symbian para criar um programa em C ++ chamado redirecionador, que era capaz de capturar a saída padrão VM e erro padrão, incluindo traços de pilha de exceção java.

o redirecionador c ++ não foi atualizado para a versão 9 do Symbian OS. Em vez disso, a "redirecionar: //" protocolo GCF foi introduzida no VM,

De um MIDlet separado, abra um InputStream de conexão retornado por Connector.open ( "redirecionar: //", Connector.READ); então você pode capturar rastreamentos de pilha de exceção em telefones Symbian.

EDIT: "redirecionar: //" está de volta em Series60 5ª edição e "redirecionar: // test" deve funcionar em Series60 3ª edição Feature Pack 2

Respondeu 22/10/2008 em 16:18
fonte usuário

votos
2

AFAIK não há nenhuma maneira de obter o rastreamento de pilha como um valor da cadeia, a menos que uma plataforma específica fornece um meio para substituir o fluxo System.err padrão. Na plataforma BlackBerry, ele joga fora a pilha de rastreamento on catch(Exception), a fim de economizar memória, no entanto, não fazer isso em catch(Throwable)e dá acesso ao rastreamento de pilha para o log do evento do dispositivo.

O que eu acabei fazendo é pegar Throwable em vez de Exceção no último momento possível e imprimir o rastreamento de pilha de lá. Isto, obviamente, tem o perigo de que você também está pegando java.lang.Erroro que não é muito bom, especialmente se a sua OutOfMemoryError, embora uma chamada para System.gc()antes de imprimir o rastreamento de pilha parece reduzir o risco e não tivemos qualquer problema com ele.

Eu olhava para qualquer plataforma que você está alvejando e ver se eles dão acesso a System.err em algum lugar. Você sempre pode ligar um depurador e ele deve aparecer na saída do console, embora parece que você está depois de obter rastreamentos de pilha 'no campo'.

Respondeu 22/10/2008 em 15:00
fonte usuário

votos
0

Eu criei uma ferramenta que pode ser usado para registrar os rastreamentos de pilha adequadas também em CLDC. Confira em http://jarrut.sourceforge.net . Ainda é muito novo e que pode ter algumas arestas, mas funciona para mim e eu não podia imaginar MIDlets em desenvolvimento, sem mais. A melhor maneira de usá-lo é combiná-lo com Microlog.

Unfotunately a ferramenta exige actualmente CLDC 1.1 por isso não pode resolver o problema para o poster original.

Respondeu 06/07/2010 em 15:09
fonte usuário

votos
0

Eu não coisa há uma maneira de fazer isso em CLDC 1.0. No entanto, em alguns dispositivos / SOs a classe de exceção subjacente poderia ser fornecendo uma maneira para acessar o rastreamento de pilha (pense mais recentes versões CLDC). Apenas inspecionar o exemplo de exceção em tempo de execução usando a reflexão para ver o que os membros expõe em suas plataformas de destino. Você poderia, então, escrever algum código que será capaz de extrair com segurança o rastreamento de pilha nas plataformas que oferecem tais informações.

Respondeu 22/10/2008 em 14:40
fonte usuário

votos
-2

Você pode ter a gravação PrintWriter a um ByteArrayOutputStream e reconstruir a seqüência dos bytes.

try{
    throw new Exception("Message");     
} catch (Exception ex){
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ex.printStackTrace(new PrintStream(out));
    System.out.println(new String(out.toByteArray()));
}

Não é bonito, mas deve funcionar praticamente em todos os lugares. Antes de tentar a acima, certifique-se que você não tem acesso a [Throwable # getStackTrace] ( http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html#getStackTrace ()) , Eclipse afirma que é disponível no CDC / Foundation 1.1, mas isso não diz nada sobre outros perfis.

Respondeu 22/10/2008 em 13:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more