2012-12-01 13 views
13

È possibile stampare una traccia di stack su una stringa in GWT? I metodi usuali di utilizzare le classi in java.io non funziona credo, perché il pacchetto java.io non è disponibile clientside (e Scrittore, PrintWriter, ecc sono in quel pacchetto)Trasforma una traccia dello stack in una stringa?

Grazie

+1

Sarebbe meglio se potessi menzionare quale versione di GWT stai usando e quale tecnica di registrazione stai seguendo sul lato client. – SSR

+1

Di quale traccia di stack stai parlando? compilare tempo o tempo di esecuzione? Se è in esecuzione, basta usare qualsiasi logger o racchiudere il codice con try catch block e trasferire la traccia dello stack di eccezioni a qualsiasi stringa desiderata. –

+0

Salve, eccezione di run time - Sto usando GWT 2.5. Sì, il fatto è che voglio convertire una traccia stack completa in una stringa e quindi magari visualizzarla in un'etichetta. Ma come possiamo ottenere una traccia dello stack dell'istanza di eccezione come stringa? – user291701

risposta

10

non sono sicuro se StackTraceElement è emulato, ma se è è possibile eseguire qualcosa di simile

for (StackTraceElement element : exception.getStackTrace()) { 
    string += element + "\n"; 
} 
9

Ecco il metodo che sto usando per recuperare una traccia dello stack pieno come String in GWT:

private static String getMessage (Throwable throwable) { 
    String ret=""; 
    while (throwable!=null) { 
      if (throwable instanceof com.google.gwt.event.shared.UmbrellaException){ 
        for (Throwable thr2 :((com.google.gwt.event.shared.UmbrellaException)throwable).getCauses()){ 
          if (ret != "") 
            ret += "\nCaused by: "; 
          ret += thr2.toString(); 
          ret += "\n at "+getMessage(thr2); 
        } 
      } else if (throwable instanceof com.google.web.bindery.event.shared.UmbrellaException){ 
        for (Throwable thr2 :((com.google.web.bindery.event.shared.UmbrellaException)throwable).getCauses()){ 
          if (ret != "") 
            ret += "\nCaused by: "; 
          ret += thr2.toString(); 
          ret += "\n at "+getMessage(thr2); 
        } 
      } else { 
        if (ret != "") 
          ret += "\nCaused by: "; 
        ret += throwable.toString(); 
        for (StackTraceElement sTE : throwable.getStackTrace()) 
          ret += "\n at "+sTE; 
      } 
      throwable = throwable.getCause(); 
    } 

    return ret; 
} 
+1

Funziona alla grande. Ma come usi StackTraceDeobfuscator? – confile

3

Non è consigliabile provare a visualizzare la traccia dello stack di errore in un'etichetta della GUI.

1) Non sono leggibili dopo GWT Obfuscation. Sembrano un mucchio di caratteri allineati su schede su nuove righe.

2) Non sono in formato I18N.

3) Il modo corretto è l'utente giusto mostra un errore ben formato "Messaggio". exception.getMessage() ti fornirà una singola riga di informazioni non-obf che dovrebbero fornire all'utente l'interazione UX necessaria.

4) Se siete alla ricerca di well formed eccezione stacktrace utile per il debug (non per l'utente) si consiglia di utilizzare funzionalità di registrazione ben documentato di GWT con modalità eccezioni web -

a) https://developers.google.com/web-toolkit/doc/latest/DevGuideLogging

b) Leggi anche http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions

Problemi correlati