Klickbare Stacktraces selber erzeugen..?

sirbender

Top Contributor
Hallo,

wenn in Eclipse (und ich denke auch IDEA) eine Exception bei der Ausfuehrung geworfen wird, kann man in der Konsole auf die einzelnen Methoden klicken und es springt zum Source code. Ich frage mich ob ich so einen klickbaren Link auch selber auf der Konsole erzeugen koennte oder eine Exception zu werfen?
 

mihe7

Top Contributor
Wie kommt man auf solche Fragen?!?

Der Stacktrace selbst ist einfach nur Text. Hast Du denn schonmal probiert, einen Stacktrace einfach via System.err auszugeben?
 

Robert Zenz

Bekanntes Mitglied
Ich frage mich ob ich so einen klickbaren Link auch selber auf der Konsole erzeugen koennte oder eine Exception zu werfen?

Jein. Soweit ich weisz funktioniert das System in Eclipse (und jeder anderen IDE) so dass diese "System.err" und "System.out" fangen und parsen bevor diese angezeigt wird. Also da hast du dann zwei Optionen:

1. Du schreibst ein Plugin fuer die IDE welche deine Ausgabe erkennt und umwandelt.
2. Du gestaltest die Ausgabe so dass der Parser von der IDE anspringt und die Links erzeugt.


So oder so, nicht allzu simpel.
 

kneitzel

Top Contributor
Die Frage ist, was du anzeigen willst, wenn man da drauf klickt. Eine Ausgabe zu filtern und dann sowas zu erkennen und mit Links zu zeigen dürfte relativ einfach sein.

Aber nun musst du ja was sinnvolles damit machen. Um Source anzuzeigen musst du den Source haben/kennen. Die genauen Details musst du haben und dann entsprechend anzeigen können.

Eine IDE hat den Source, hat diesen ausgewertet und kann dann auch auch innerhalb der IDE navigieren. Aber hast du das?

Generell nicht zu schwer - z.B. kann man auf einer IDE aufsetzen (eclipse, intellij, alles open Source). Ob man da dann 'nur' ein AddOn/PlugIn schreibt oder eine eigenständige App: das muss man dann sehen, was ggf. am Einfachsten ist.

Bei eclipse wäre das dann z.B. eine typische Eclipse RCP Anwendung.
 

sirbender

Top Contributor
Ja, ich habe die Sourcen. Die sind auch Teil des Eclipse Projekts. Ich dachte ihr kennt vielleicht eine Methode mit der man ohne ein Plugin zu schreiben sowas einfach machen kann indem man den Konsolen-Parse irgendwie mit dem richtigen System.err output dazu bringt das klickbar zu machen. Ich arbeite gerade einem Source-Code-Manipulationsprojekt und muss oft im Source-Code rumspringen und das wäre recht praktisch.
 

thecain

Top Contributor
Du kannst einen Stacktrace direkt in den ConsoleView von Eclipse einfügen, dann ist er klickbar. Z.B wenn ein Build auf dem Buildserver lief oder ein Stacktace aus einem Log. (Natürlich nur, wenn die Sourcen im Eclipse Projekt sind)
 

kneitzel

Top Contributor
Ist leider nicht ganz so trivial. Denn bei der Ausführung hast du das ja alles nicht mehr zur Hand. Du hast zwar noch gewisse Debug Informationen aber das war es dann schon schnell.

Vielleicht willst du den Usecase auch erst einmal aufzeigen? Das, was du da forderst, ist ja erst einmal nur für Entwickler wichtig. Niemand sonst schaut in den Source. Und die Entwickler haben dann ihre Tools. Da wäre dann erst einmal die Frage, was da die eigentliche Anforderung ist.
 

Robert Zenz

Bekanntes Mitglied
Ich arbeite gerade einem Source-Code-Manipulationsprojekt und muss oft im Source-Code rumspringen und das wäre recht praktisch.

Du kannst immer "Thread.dumpStack()" aufrufen, dann wird ein Stacktrace vom aktuellen Ablauf in die Konsole geworfen, unddieser wird wiederum durch die IDE klickbar gemacht. Damit musst aber halt an der Stelle werfen an der du hinwillst.

Jetzt habe ich mal ganz ganz schnell einen Test gemacht, und Eclipse macht Links aus folgendem:

1. Alles was dem Muster "(ClassName.java:LineNumber)" entspricht, zum Beispiel "(Thread.java:1234)".
2. Alles was mit "Exception" ended, zum Beispiel "MyCoolException" oder "java.lang.MyCoolException".

Beides wird im Klassenpfad des Projekts gesucht wenn man d'rauf klickt, wenn ich das richtig sehe, und es spielt keine Rolle ob "out" oder "err". Also...der Parser ist simpler als ich geglaubt habe (was auch erklaert wieso teilweise die Ausgabe in Eclipse so langsam ist, der prueft ja wirklich relativ groszzuegig).
 
Zuletzt bearbeitet:

sirbender

Top Contributor
Coole Lösung. Ich habe gerade nochmal gegoogelt und ich war scheinbar nicht der Einzige der das schon mal gesucht hat: https://stackoverflow.com/questions...onsole-to-hyperlink-text-to-source-code-files

Komisch, dass ich das vorher nicht gefunden hab.

Ich glaube ich hab auch schonmal gesehen wie ein Programm http-Links klickbar in der Eclipse Console gemacht hat. Zum Beispiel irgendwelche Server die dann z.B. http://localhost usw. ausgeben, was klickbar ist.

Meine ersten Tests mit normaler URL und <a href=\'" + url + "\'> haben leider nicht geklappt.
 

developer418

Mitglied
Die Funktion Thread.dumpStack(); ist ja super. Hier noch eine Variante mit Exception.



Einfache Lösung, um das zu machen:

Beispielcode:
public class AnyCode {
    public static void main(String[] args) {

        System.out.println("Starting app");

        callError();

        System.out.println("Shutdown app");
    }

    private static void callError() {
        System.out.println("Do something 1");
//     Thread.dumpStack();
        new RuntimeException("HERE I LIKE TO CLICK").printStackTrace();
        System.out.println("Do something 2");
    }
}

ergibt:

Consolenausgabe in IDEA:
Starting app
Do something 1
Do something 2
Shutdown app
...
BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
java.lang.RuntimeException: HERE I LIKE TO CLICK
    at de.cryptosdk.dev.play.AnyCode.callError(AnyCode.java:15)
    at de.cryptosdk.dev.play.AnyCode.main(AnyCode.java:8)
11:34:10: Task execution finished ':AnyCode.main()'.

Zeile 9 (AnyCode.java:15) & Zeile 10 (AnyCode.java:8) sind anklickbar in der IDE, in der System Console aber nicht.
 

Ähnliche Java Themen


Oben