Frage

In regelmäßigen Java, können Sie den Text einer Stack-Trace erhalten, indem ein Printwriter zu print vorbei. Ich habe das Gefühl, ich kenne die Antwort auf diese Frage (das heißt „Nein“), aber

Gibt es eine Möglichkeit den Text eines Stack-Trace in JavaME als String?

zu erhalten

Update:

Ich sollte erwähnen, dass ich auf CLDC beschränkt bin 1.0

War es hilfreich?

Lösung

AFAIK gibt es keine Möglichkeit, den Stack-Trace als String-Wert zu erhalten, es sei denn, eine bestimmte Plattform ein Mittel bereitstellt, den Standard System.err Strom außer Kraft zu setzen. Auf der Blackberry-Plattform, wirft sie den Stack-Trace auf catch(Exception) aus, um Speicherplatz zu sparen, jedoch macht es das nicht auf catch(Throwable) und ermöglicht den Zugriff auf den Stack-Trace durch das Gerät Ereignisprotokoll.

Was ich tun endete aufholt Throwable anstatt Ausnahme im allerletzten Moment und das Drucken der Stack-Trace von dort. Das hat natürlich die Gefahr, dass Sie auch java.lang.Error fangen, die nicht sehr gut, vor allem, wenn seine OutOfMemoryError, obwohl ein Anruf vor dem Drucken des Stack-Trace zu System.gc() scheint das Risiko zu reduzieren, und wir haben keine Probleme mit ihm .

Ich würde Blick auf alles, was Plattform Sie Targeting und sehen, ob sie den Zugang ermöglichen irgendwo System.err. Sie können jederzeit einen Debugger anschließen und es sollte auf dem Konsolenausgabe erscheinen, obwohl es, wie Sie nach dem Aufstehen Stack-Traces ‚im Feld‘ sind sich anhört.

Andere Tipps

zwei Lösungen:

  • die Ausnahme auf Emulator reproduzieren. das drahtlose Toolkit und Netbeans wird Stack-Traces auf Ihrem Computer.

  • Drucken
  • verwenden, um ein Symbian-Gerät.

Vor dem Feature Pack 2 von Series 60 3rd Edition, verwenden Symbian-Handys die Sun Hotspot Java Virtual Machine. Es wurde auf Symbian OS angepasst, indem es zu einer teilweisen Umsetzung der C-Standardbibliothek verknüpft.

Dies erlaubt Symbian ein C ++ Programm namens Redirector zu erstellen, die die VM der Standardausgabe und Standardfehler der Erfassung, einschließlich Java-Ausnahme-Stack-Spuren fähig war.

Die C ++ Redirector wurde nie für die Version 9 von Symbian-Betriebssystem aktualisiert. Stattdessen wird ein "Umleitung: //" GCF-Protokoll wurde in die VM eingeführt,

Von einem separaten MIDlet, öffnen Sie einen Input aus der Verbindung von Connector.open zurückgegeben ( "umleiten: //", Connector.READ); Sie können dann Ausnahme Stack-Traces auf Symbian-Handys erfassen.

EDIT: "umleiten: //" ist zurück in Series60 5. Auflage und "redirect: // Test" sollte 3rd Edition Feature Pack 2

auf Series60 arbeiten

Ich weiß nicht, was es eine Möglichkeit, dass in CLDC 1.0 zu tun ist. Jedoch auf einigen Geräten / Osés die zugrunde liegende Exception-Klasse eine Möglichkeit, die Bereitstellung für den Zugriff auf den Stack-Trace (man denke neuere Versionen CLDC) werden könnte. inspizieren nur die Ausnahme Instanz zur Laufzeit mithilfe von Reflektion, um zu sehen, was die Mitglieder auf den Zielplattformen verfügbar macht. Sie könnten dann einige Code schreiben, die sicher der Lage, auf den Plattformen der Stack-Trace zu extrahieren, die solche Informationen bieten.

Ich habe ein Werkzeug geschaffen, das verwendet werden kann, die richtigen Stack-Traces auch in CLDC loggt sein. Check it out unter http://jarrut.sourceforge.net . Es ist noch sehr neu und es könnte ein paar Ecken und Kanten haben, aber es funktioniert für mich und ich konnte mir nicht vorstellen Entwicklung MIDlets ohne es mehr. Der beste Weg, zu verwenden, ist es zu kombinieren mit Microlog.

Unfotunately das Werkzeug erfordert derzeit CLDC 1.1 so könnte es das Problem für das ursprüngliche Plakat nicht lösen.

können Sie haben die Printwriter zu einem ByteArrayOutputStream schreiben und den String aus dem Byte rekonstruieren.

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

Es ist nicht schön, aber es sollte ziemlich überall arbeiten. Bevor Sie die oben versuchen, stellen Sie sicher, dass Sie keinen Zugriff auf [Throwable # getStackTrace] ( http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html#getStackTrace ()) Eclipse behauptet, es in CDC / Foundation 1.1 verfügbar ist, aber das sagt nichts über andere Profile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top